![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
kuzi_kz
这个人很懒,还没有添加简介
展开
-
完美消除(数位dp,单调栈)
原题链接1.对于一个数的花费,可以把数从高位到地位枚举,利用单调栈。比如当前位为x,把栈里比x大的全部弹出。然后如果栈里还有x,则不把x放入,操作数不变。若栈里没有x,可以把x放进去,操作数+1。比如323 。3进栈 op=1。2来了,把3弹出,2放进去 op=2。3来了,把3放入栈中,op=3比如232 。2进栈 op=1。3来了,3进栈,op=2 。2来了,把3弹出,2已经在里面了,不用放进去,op=2。2.dp[i][k][st]dp[i][k][st]dp[i][k][st]表示当前在第po原创 2021-01-09 09:46:37 · 114 阅读 · 2 评论 -
背包问题变式
1.有n组物品。每组物品里面必须恰好选1个。求体积不超过m的最大价值。题解:跟分组背包的类似,第i-1的状态只有选择了物品,才有价值否则为0。把 dpi,j=dpi−1,jdpi,j=dpi-1,jdpi,j=dpi−1,j 这个去掉。让转移必须 i 层选择了物品才能从i-1走过来如果第i层没有选任何物品,则第i层的状态就会出现价值为0的断层,后面的就不会更新了注意i=1的特别情况即可#include<bits/stdc++.h>using namespace std;const原创 2020-11-16 23:16:55 · 252 阅读 · 0 评论 -
CF#683(Div.2) D. Catching Cheaters(dp)
原题链接题意:给你一个长度为n,m的字符串a,b。求a中任取一个子串C,和b中任取一个子串D。最大的 LCS(C,D)−len(C)−len(D)LCS(C,D)-len(C)-len(D)LCS(C,D)−len(C)−len(D)题解:设f[i][j]f[i][j]f[i][j]表示以a中以 i,b中以 j 结尾的子串的最大值f[i][j]=max(f[i−1][j−1]),0)+2 if原创 2020-11-16 22:30:23 · 123 阅读 · 0 评论 -
Eat Walnuts(区间dp)
原题链接题意给你n个坚果。每次不能删第一个和最后一个。删除一个坚果耗费(a[i]+a[i-1]+a[i+1])^2。求最终删剩下两个坚果最小花费。题解设f[i][j]f[i][j]f[i][j]表示保留 i 和 j 并删除i-j之间坚果的最小花费。f[i][j]=min(f[i][j],f[i][k]+f[k][j]+p(a[i]+a[k]+a[j])f[i][j]=min(f[i][j],f[i][k]+f[k][j]+p(a[i]+a[k]+a[j])f[i][j]=min(f[i][j],原创 2020-11-02 22:15:00 · 329 阅读 · 0 评论