
DP
HOWARLI
自己选择的路,就算跪着也要走完!
展开
-
2021牛客国庆集训派对day1 G - Steiner Tree
Description给你一个n个点m条边的图,求不同的斯坦纳树的个数,1≤n≤50,K(关键点)≤121\leq n \leq 50,K(关键点)\leq 121≤n≤50,K(关键点)≤12Solution老年人复习题,将DP分成两类:f,g,分别表示 限制一定为链的 和 无限制的 答案,如何不重不漏枚举子集:强制选最高位为f,剩下的为g,这样就OK了Code#include <bits/stdc++.h>#define fo(i,a,b) for(int i=a;i&l原创 2021-10-05 10:06:40 · 169 阅读 · 0 评论 -
【HDU 6855】Auto-correction
Description给出一个长度为n的序列a,现在我们对这个序列进行m次如下的操作:(保证所有操作的操作区间互不相交)删除:删除l~r中的元素;替换:将l~r中的元素替换成给定的非空序列;插入:在第k个元素前面插入给定的非空序列;设经过这m次操作后的序列为b,请你给出一种合法的,只包含“替换”操作的操作序列,使得a经过这些操作后也能变成b,要求给出的方案中,所有操作的∑(r−l)\sum (r-l)∑(r−l)最小,如果相同则要求操作次数最少,输出任意一种即可保证序列a,b长度小于均原创 2020-09-01 21:38:12 · 401 阅读 · 0 评论 -
【JZOJ 5377】【NOIP2017提高A组模拟9.19】开拓
DescriptionSolution很显然,这题有O(n3)O(n^3)的DP, 考虑一下怎么优化,发现瓶颈在于没法表示钻头的能力值, 我们发现,当前钻头的能力值的改变,对于后面的影响是乘上一个数,而且这个数很好算, 那么就是说,我们倒过来DP,设当前的w值为1,即可从后面转移了,复杂度:O(n)O(n)Code#include <cstdio>#include <algorithm>#原创 2017-09-20 12:27:28 · 474 阅读 · 0 评论 -
【JZOJ 5358】【NOIP2017提高A组模拟9.12】BBQ
Description给出序列a,b,求 ∑i=1n∑j=1i−1Cai+ajai+aj+bi+bj\sum_{i=1}^n\sum_{j=1}^{i-1}C^{a_i+a_j}_{a_i+a_j+b_i+b_j} ans%=1e9+7 n,m<=100000, ai,bi<=2000n,m<=100000,\ \ a_i,b_i<=2000Solution看到C公式,应该就要想到在网格上D原创 2017-09-13 22:50:47 · 351 阅读 · 0 评论 -
【JZOJ 5215】【GDOI2018模拟7.9】组合数问题
Description求: (∑i=1∞Cik+rnk)modP(\sum_{i=1}^{\infty}C_{nk}^{ik+r})\mod P n<109,r<k<50,P<230−1n<10^9,r<k<50,P<2^{30}-1Solution指向【一大堆常犯的错误、提醒和公式】的第19条; 我们来考虑一下这个式子的意义: 在nk个物品中,选出x个物品,使得xmodk=rx\mod k原创 2017-07-11 22:29:53 · 563 阅读 · 0 评论 -
【JZOJ 5220】【GDOI2018模拟7.10】C
Description设A、B两字符串的最长公共公共前缀长度为L,那么在A串所有长度为L的子串中,有多少个同时是B的子串。Solution把题目改成:“A、B串中所有长度为L的子串,有多少个是两两相同的”,那么这个直接用求最长公共子串的DP加上统计方案数即可,注意细节;那么这题怎么做呢? 设i,j,k,保证ai=aj,ai=ak,j<ka_i=a_j,a_i=a_k,j<k这三个条件 那么有结论原创 2017-07-11 20:32:43 · 487 阅读 · 0 评论 -
【GDSOI 2017】【JZOJ 5104】 逃亡
Description给出一颗根为1的有根树,每个节点有两个值ax,bxa_x,b_x,bxb_x表示当前节点的攻击力,如果点y在点x的子树中,切by<bxb_y<b_x,则x会向y发起axa_x次进攻,现在已知每个点的a值,每个点的b值在0~m之间,求全局恰好发生i次进攻的方案数(0<=i<=K0<=i<=K)。 n<15,K<=20n<15,K<=20solution显然发现m是没有什么用的,原创 2017-05-08 20:51:48 · 534 阅读 · 0 评论 -
【GDOI 2017】【JZOJ 1502】小学生语文题
Description给出一个原始串和目标串,要求在原始串上不停的把后面的字符移动到前面去,用最少的步数使两串相同。 n<=2000n<=2000Solution用DP:fi,jf_{i,j}表示目标串匹配到了i,原始串匹配到了j, 那么当前有两种选择: 1. 如果两位置字符相同,则直接匹配; 2. 当前这位的目标串然后面的来匹配,先跳过; 3. 当前这位的原始串去匹配前面跳过的目标串(当原创 2017-05-12 12:43:47 · 582 阅读 · 0 评论 -
【51NOD 1048】【51NOD 1383】整数分解为2的幂 V2
Description任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量! 比如N = 7时,共有6种划分方法。7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4Solution设gi,j,kg_{i,j,k}表示一个序列组成2i2^i这个数,这个序列中最大的数为2j2^j,最原创 2017-04-17 21:58:44 · 816 阅读 · 0 评论 -
【JZOJ 3737】挖宝藏
DescriptionSolution这题是关于斯坦纳树的; 先来考虑一下当h=1的情况: 我们发现,最后的答案构建出来一定是一颗树, 那么就设DP方程:fx,y,Sf_{x,y,S}表示以x,y这个点为根的树联通了集合S的点, 那么它可以由以下的数转移过来:(a为代价) min(fx−1,y,S,fx+1,y,S,fx,y−1,S,fx,y+1,S,)\min(f_{x-1,y,S},f原创 2017-03-22 20:21:48 · 688 阅读 · 0 评论 -
【JZOJ 3747】Problem C
Description基因串是由ACGT4个字母组成的,我们有一个长度为n的基因串S。想要知道长度为m的基因串中,与S的最长公共子序列分别为0; 1; ; n的串各有几个。输出答案关于10^9 + 7的余数。 n<=10;m<=1000n <= 10;m <= 1000Solution先看一下暴力, 每次枚举出一个大串b以后,用DP来算: 设fi,jf_{i,j}表示大串做到位置i,小串匹配到原创 2017-04-06 22:21:04 · 685 阅读 · 0 评论 -
【JZOJ 3861】【JSOI2014】支线剧情2
DescriptionSolution显然的树形DP, 设gxg_x表示以点x根,一次存档也没有,跑完所有子树的时间, 设fxf_x表示以x的子树全部跑完所需的时间,可以有存档,也可以没有,(包含从根走下来的时间) 有三种情况, 1. 当前点存档,子树没有存档, 2. 当前点存档,子树只有一个存档, 3. 当前点存档,子树有一个存档,其他的点想存档要从根走下来,情况1,3比较好做,先考虑原创 2017-01-17 22:41:48 · 909 阅读 · 0 评论 -
【JZOJ 5427】【NOIP2017提高A组集训10.25】吃草
Description后院总共有n片草坪,第i片草坪投影到数轴上,是一段l[i]到r[i]的闭区间,保证l[i]+r[i]是偶数,l[i]<=r[i]。 Sullivan可以在整点上放0v0来把草吃掉(于是0v0变成了0π0)。如果第i片草坪覆盖了x点上的0π0(l[i]<=x<=r[i]),那么这只0π0就可以吃掉这片草坪里的草。每一片草坪的草需要且只能被一只0π0吃掉。如果一片草坪覆盖了多只0原创 2017-10-26 17:30:25 · 577 阅读 · 0 评论 -
【JZOJ 5393】【NOIP2017提高A组模拟10.5】Snake vs Block
Description Solution题目的描述极其辣鸡,Code#include <cstdio>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=201;int read原创 2017-10-05 22:13:14 · 439 阅读 · 0 评论 -
【AtCoder】【AGC013D】Piling Up
Description你有一堆黑白球和一个盒子, 一开始,盒子里有n个不知道颜色的球, 接下来,你要对盒子进行m次操作: 1. 随机从盒子里取出一个球; 2. 往盒子里放一黑一白俩球; 3. 再随机从盒子里取出一个球;这样你总共会拿出2m个球, 求拿出的这些球有多少总可能(有序),Solution首先,盒子里总会有n个球, 设DP:f[i][j]表示,做了i次操作...原创 2018-02-13 19:02:26 · 672 阅读 · 0 评论 -
【AtCoder】【AGC017F】Zigzag
Description给出一个类似杨辉三角的三角形,要求在上边选出m条走n步的路径,并满足: 1. 每条路径只能往左下/右下走,; 2. 第i+1条路径必须在第i条路径的右侧(可以重合);在给出一些要求,规定第x条路径的第y步一定往左下/右下走。 求方案数mod109+7mod109+7\mod10^9+7Solution题意转化:构造m个n位二进制数,设si,xsi,xs_...原创 2018-02-13 18:26:30 · 566 阅读 · 0 评论 -
【JZOJ 4345】【WC2016模拟】Fountain
DescriptionSolution考虑暴力n!n!枚举顺序,如何快速求答案, 设:sum=∑n−1i=1max(ai,ai+1)sum=\sum_{i=1}^{n-1}\max(a_i,a_{i+1}) 答案显然是Cnm−sum+nC^{n}_{m-sum+n}写出这个式子考虑转成DP: 设:f[i][j][k][l],表示从大到小做到第i个,当前有j个空隙必须放点,sum为k,l为0/1原创 2017-12-24 14:08:56 · 730 阅读 · 0 评论 -
【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo
Description0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO。 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w[i]。 OvO发现,如果她摘下了i号Galo,那么i的子树中的Galo以及i到根的路径上的其他Galo都会死掉。 OvO的袋子只能装k个Galo,她的嘴巴里还能叼1个,请问她所摘Ga原创 2017-10-26 17:26:11 · 502 阅读 · 0 评论 -
【JZOJ 5424】【NOIP2017提高A组集训10.25】凤凰院凶真
DescriptionSolution这题就是在原来最长子序列的基础上加上了上升这个条件, 设DP:fi,jf_{i,j}表示a做到了第i个,不一定选i,b做到了j,一定选j,的答案, 转移这样就显然了复杂度:O(n2)O(n^2)Code#include <cstdio>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)原创 2017-10-25 16:34:50 · 622 阅读 · 0 评论 -
【JZOJ 5442】【NOIP2017提高A组冲刺11.1】荒诞
Description我的灵魂与我之间的距离如此遥远,而我的存在却如此真实。 ——加缪《局外人》 我醒来的时候,发现满天星斗照在我的脸上。田野上的声音一直传到我的耳畔。夜的气味,土地的气味,海盐的气味,使我的两鬓感到清凉。这沉睡的夏夜的奇妙安静,像潮水一般浸透我的全身。这时,长夜将尽,汽笛叫了起来。它宣告有些人踏上旅途,要去一个从此和我无关痛痒的世界。 这时我在想一个问题:我有一个n个点,m条原创 2017-11-01 21:10:59 · 531 阅读 · 0 评论 -
【JZOJ 5415】【NOIP2017提高A组集训10.22】公交运输
Description城市中有一条长度为n的道路,每隔1的长度有一个公交车站,编号从0到n,学校在0号车站的位置。其中每个公交车站(除了n号车站)有两个属性ci和vi,代表从这个公交车站出发的公交车的性质。ci代表这个从i出发的公交车,相邻两个停靠站之间的距离。vi表示每坐1站的花费。 注意,一辆公交车出发后会向n号车站的方向行进。同时,一名乘客只能从起点站上车,但可以从任意停靠站下车。校庆志愿者原创 2017-10-23 22:31:43 · 573 阅读 · 0 评论 -
【JZOJ 5436】【NOIP2017提高A组集训10.30】Group
DescriptionSolution先把所有数排序,从小到大, K的限制就是,所以组的最大减最小的和<=K<=K,有一个显然的DP: 设f[i][j][k]表示做到i,有j个没有封尾,k为:(已经封尾的组的差)-(没有封尾的组的最小的数), 这样,封尾就直接k+aik+a_i即可, 转移显然,但复杂度为O(n2∑ai)O(n^2\sum{a_i}),巨大,开O2才能过,我们发现,k这一维的原创 2017-10-30 22:03:04 · 375 阅读 · 0 评论 -
【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
DescriptionFlowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1<=i<j<=2m1<=i<j<=2m,满足以下条件: 1)i 为偶数,j 为奇数 2)第i 颗友谊颗粒和第j 颗友谊颗粒同为圆粒或同为皱粒 3)第i 颗友谊颗粒和第j 颗友谊颗粒都还没有被使用原创 2017-10-22 22:35:10 · 677 阅读 · 1 评论 -
【JZOJ 5429】【NOIP2017提高A组集训10.27】排列
Description有两个长度为n的排列A和B,定义排列的价值f(A,B)为所有满足A[i]>B[i]的位置i的数量。 现给出n,A,B和S,其中A和B中有一些位置的数未知,问有多少种可能的填数的方案使得f(A,B)=SSolution先把原序列拆成两个,一个a全为0,一个b全为0,俩都不为0的直接计算删掉,看到这种题考虑先计算>=S>=S的,再减掉>=S+1>=S+1的, 计算>=k>=k的原创 2017-10-27 22:17:14 · 394 阅读 · 0 评论 -
【51NOD 1383】整数分解为2的幂
Description任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。 比如N = 7时,共有6种划分方法。7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4Solution显然,当n为奇数时(除了1),fn=fn−原创 2017-01-11 20:45:15 · 901 阅读 · 0 评论 -
【JZOJ 3853】帮助Bsny
DescriptionBsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数。例如,如果书的高度是30,30,31,31,32,那么混乱值为3;30,32,32,31的混乱值也为3。但是31,32,31,32,31的混乱值为5,这实在是太乱了。 Bsny想尽可能减少混乱值,但他有点累了,所以他决定最多取出k本书,再随意将它们放回到书架上。你能帮助原创 2017-01-15 19:47:57 · 1264 阅读 · 0 评论 -
【JZOJ 4685】礼物
Description夏川的生日就要到了。作为夏川形式上的男朋友,季堂打算给夏川买一些生日礼物。 商店里一共有种礼物。夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得)。 每次,店员会按照一定的概率Pi(或者不拿出礼物),将第i种礼物拿出来。季堂每次都会将店员拿出来的礼物买下来。 众所周知,白毛切开都是黑的。所以季堂希望最后夏川的喜悦值尽可能地高。 求夏川最后最大的喜原创 2016-08-13 16:06:07 · 846 阅读 · 0 评论 -
【JZOJ 3072】掷骰子
Description太郎和一只免子正在玩一个掷骰子游戏。有一个有N个格子的长条棋盘,太郎和兔子轮流掷一个有M面的骰子,骰子M面分别是1到M的数字.且掷到任意一面的概率是相同的.掷到几.就往前走几步.当谁走到第N格时,谁就获胜了。游戏中还有一个规则“反弹”.就是当一位选手要走到第N格外时.他就会后退(就像飞行棋进营一样)。假设现在一位追手在A格.当他掷出B时:1.A+B<N,走到第A+B.络,2原创 2016-08-18 22:57:28 · 618 阅读 · 0 评论 -
【JZOJ 3083】塔(加强)
Description玩完骰子游戏之后,你已经不满足于骰子游戏了,你要玩更高级的游戏。 今天你瞄准了下述的好玩的游戏: 首先是主角:塔。你有N座塔一列排开。每座塔各自有高度,有可能相等。 这个游戏就不需要地图了。 你每次可以选择相邻的两座塔合并在一起,即这两座塔的高度叠加后变成了同一座塔。然后原本分别与这两座塔相邻的塔变得与这座新的塔相邻。 你的目标是在使用最少的操作次数原创 2016-08-18 13:00:32 · 695 阅读 · 0 评论 -
【JZOJ 4710】Value
DescriptionSolution贪心的想,如果已经确认了选哪些点,那么顺序一定是以W的值排列, 所以按照这个性质,按w从大到小排个序,然后倒着选, 用DP来实现, 复杂度:O(n2)O(n^2)Code原创 2016-08-17 19:59:43 · 468 阅读 · 0 评论 -
【Codeforces 678E】Another Sith Tournament &【JZOJ 4648】锦标赛
DescriptionCodeforcesThe rules of Sith Tournament are well known to everyone.JZOJ403机房最近决定举行一场锦标赛。锦标赛共有N个人参加,共进行N-1轮。抽象题意:有n个人要两两对决(n-1)场,已知每两个人对决的胜率,求一安排顺序,使1的最大胜率,输出最大的胜率。Solution拿到题就可以得出此题肯定是状态压缩DP,而D原创 2016-07-18 08:27:35 · 812 阅读 · 0 评论 -
【JZOJ 4630】计数
Description给出n和k,求出n位的k进制数中不包含两个连续的0的数,且没有前导 0的数有几个。如要求7位的十进制数,如1010230算一个,1000198和0011234 不算,Solution普通DP: fi,0=fi−1,1fi,1=m∗(fi−1,0+fi−1,1)转化一下: fi=m∗(fi−1+fi−2)套上高精度即可。Code原创 2016-07-15 14:55:41 · 814 阅读 · 0 评论 -
【JZOJ 4599】西行妖
Description在幻想乡白玉楼有一棵终年不开花的樱树叫西行妖,西行寺幽幽子曾经为了让它开花而大量收集春度,然后被城管教训了一顿… 现在,幽幽子得到城管的允许,收集了S点春度,让西行妖重新开花。 西行妖可以被看成是一棵有n个节点的树,每个叶子节点被分配了1点春度就能开花(幽幽子不会无意义地使用她的春度,于是最多只会给同一个叶子节点分配1点春度),对于非叶子节点i,如果它有至少有1个儿子开花,原创 2016-07-14 22:25:28 · 1042 阅读 · 0 评论 -
【JZOJ 4595】String
Description有两种字符串S,T。长度分别为n,m。现在需要在S里面有序地选出k个子串,且在T中出现的顺序与这k个子串的顺序相同。问这k个子串最大的长度和Solution用DP, 设fi,j,k,0/1f_{i,j,k,0/1}表示当前做到S串i位,T串j为,用了k个区间,当前区间可以扩展还是已经完结, 转移显然:fi,j,k,1=max(fi−1,j−1,k,1,fi,j−1,k−1,原创 2016-07-08 15:53:06 · 539 阅读 · 0 评论 -
【JZOJ 3432】【OnlineJudge 1061】小M的服务器(含斜率优化解释)
我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, …, Sn。首先,我们可以选择一些服务器,直接把文件复制到它们中;将文件复制到服务器Si上,需要花费ci > 0的置放费用。对于没有直接被复制文件的服务器Si来说,它依次向后检查Si+1, Si+2, …直到找到一台服务器Sj:Sj中的文件是通过直接复制得到的,于是Si从Sj处间接复制得到该文件,这种复制方原创 2016-06-12 19:48:49 · 629 阅读 · 0 评论 -
【NOIP2015模拟11.3】备用钥匙
Description你知道Just Odd Inventions社吗?这个公司的业务是“只不过是奇妙的发明(Just Odd Inventions)”。这里简称为JOI社。 JOI社有N名员工,编号从1到N。所有员工的工作时间从时刻0持续到时刻M,时刻0和时刻M的时候,所有员工都必须在公司内。 某天,出于巧合,JOI社的每个员工都要出行恰好一次。员工i(1<=i<=N)在时刻Si离开公司,时刻原创 2016-04-18 20:40:53 · 695 阅读 · 0 评论 -
【JZOJ 3052】剪草
Description有N棵小草,编号0至N-1。奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H。在第0时刻,第i棵小草的高度是h[i],接下来的每个整数时刻,会依次发生如下三个步骤: 1. 每棵小草都长高了,第i棵小草长高的高度是grow[i]。 2. Bessie选择其中一棵小草并把它剪平,这棵小草高度变为0。注意:这棵小草并没有死掉,它原创 2016-09-05 19:50:40 · 900 阅读 · 0 评论 -
【CQOI 2012】【JZOJ 4700】【BZOJ 2669】局部极小值
Description 抽象题意:在一个矩阵中依次填入数,要求只有规定的数是小于它周边的数。Solution先来考虑一下当每一个.都有与它相邻的X, 因为棋盘很小,最多有8个X, 用状态压缩: fi,Sf_{i,S}表示当前选到数字i,状态为S, fi,S=fi−a,S∗(RS−i+1)+∑k∈Sfi−1,Kf_{i,S}=f_{i-a,S}*(R_S-i+1)+\sum_{k\in原创 2016-08-16 15:52:52 · 654 阅读 · 0 评论 -
【JZOJ 4806】打工
Solution从高位往低位做,可以用一个很显然的DP方程:设f[i][j]表示做到第i位,有j种不同的分组,并且低于输入的有多少种。 转移显然:从上一位新增或者当前局限扩展;再把当前最大的扩展上去。复杂度:O(n2)原创 2016-10-10 19:31:37 · 651 阅读 · 0 评论 -
【JZOJ 4937】与运算
DescriptionSolution肯定先把所有的数转成二进制, 设一个gig_i表示i这个二进制被多少个数包含,也就是这个数前面可以放多少个数(满足aia_i and i=i), 这样就可以状态压缩DP了, 当前做到了i,枚举在i的基础上减掉一位转移到j,那么转移式为:fj=fi+j∗(gj−gi)f_j=f_i+j*(g_j-g_i)复杂度:O(mlog(m))O(m\log(m))Co原创 2017-01-14 20:25:33 · 822 阅读 · 0 评论