
动态规划
文章平均质量分 77
道安居士
这个作者很懒,什么都没留下…
展开
-
[算法]数位dp与状压dp
[算法] 数位dp与状压dp这几天刷了十几道数位dp,除了个别题以外,感觉都挺板的。状压dp中也有两种固定的题型出现了很多次。1.数位dp模板vector<int> num;ll dfs(int pos, int st, int limit, int lead){ if(!pos) return 1;//这里是递归边界,可能要改 //这里可以加剪枝 if(!limit && !lead && dp[pos][st] !=原创 2021-08-10 10:34:49 · 546 阅读 · 0 评论 -
[题解] Double Strings
[题解] Double Strings 动态规划+组合数学题目链接题意大概就是:有两个字符串A,BA,BA,B,要从中选出两个长度相同的子序列,满足:这两个子序列前面k(k>=1)k(k>=1)k(k>=1)个字符相同,并且第k+1k+1k+1个字符满足ak+1<bk+1a_{k+1}<b_{k+1}ak+1<bk+1,后面的字符任意,求所有这样的子序列个数。首先对于前面kkk个字符相同,可以用dp[i][j]dp[i][j]dp[i][j]表示AAA的前原创 2021-08-01 14:58:58 · 205 阅读 · 0 评论 -
[题解] CF 1528B Kavi on Pairing Duty
[题解] CF 1528B Kavi on Pairing Duty 动态规划+简单数论题目链接这是题目给出的部分样例。让我们仔细看第222个和第777个。好像第777个内层和第222个完全一样?这让我们反应过来,好像可以dpdpdp。我们经过进一步的推理可以发现:设第111个点和第xxx个点相连,那么对于有端点在[x+1,2n][x+1,2n][x+1,2n]的线段,我们发现,如果这个线段的左端点在[1,x][1,x][1,x]之内,那么这两个线段必相交,故长度一定相等;如果这个线段的左原创 2021-05-25 17:07:26 · 491 阅读 · 0 评论 -
[题解]CF1525D Armchairs
[题解]CF1525D Armchairs dp有一排座位,编号1 n1~n1 n,其中不超过n2\frac{n}{2}2n的座位被人坐上了。现在需要调整每个人的座位,每次把坐在i的人调到空位j的代价是∣i−j∣|i-j|∣i−j∣。现在需要把每个人调一次,使得原来坐了人的位置都空出来。问最小的花费是多少。刚开始想的是贪心。用a,ba,ba,b分别记录人和空位的下标,然后升序排序,最后从左到右依次遍历。可惜的是,这种算法只对nnn是偶数并且出现的人正好有n2\frac{n}{2原创 2021-05-17 09:59:44 · 514 阅读 · 4 评论 -
[题解]琪露诺 单调队列优化dp
[题解]琪露诺 单调队列优化dp坑点挺多的。。。首先推出一个基本的式子:dp[i]=maxj=i−r,j>=0i−ldp[j]+a[i] dp[i] = max_{j = i-r, j >= 0}^{i-l}dp[j] + a[i] dp[i]=maxj=i−r,j>=0i−ldp[j]+a[i]初始条件dp[0]=0dp[0]=0dp[0]=0这个式子成立的条件是,dp[j]能够到达。然后就把所有dp[i]dp[i]dp[i]赋值-inf,表示还没有到达。我们用一个单调队原创 2021-05-13 14:03:46 · 115 阅读 · 0 评论