随笔分类 - 动态规划—区间dp
摘要:到底什么才是真正的是非 到底哪一方才能 绝对肯定错与对
阅读全文
摘要:神区间dp 设f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内只有这一个M,f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内有两个及以上的M 然后显然的转移是f[i][j][1]=min(f[i][k][0],f[i][k][1])+min(f[k+1][j][0],
阅读全文
摘要:不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i x,j),(i,j+x)转移 把四个字符hash成1234比较好写(大概 cpp include include include usi
阅读全文
摘要:挺好的区间dp,状态设计很好玩 一开始按套路设f[i][j],g[i][j]为吃完(i,j)区间站在i/j的最小腐败值,后来发现这样并不能保证最优 实际上是设f[i][j],g[i][j]为从i开始吃j个,站在这段区间的左/右端点的 最小所有草增加的腐败值 ,因为这些腐败之最后也是要算进去的,所以直
阅读全文
摘要:就是区间dp啦f[i][j]表示以i开头的长为j+1的一段的答案,转移是f[i][j]=s[i+l] s[i 1]+min(f[i][j 1],f[i+1][j 1]),初始是f[i][1]=a[i] 于是可以把j维推掉 cpp include include using namespace std
阅读全文
摘要:裸的区间dp,设f[i][j]为区间(i,j)的答案,转移是f[i][j]=max(f[i+1][j]+a[i]\(n j+i),f[i][j 1]+a[j]\ (n j+i)); cpp include include using namespace std; const int N=2005;
阅读全文
摘要:只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从i到j的价格,长度从小到大枚举更新就行了 f[i][j]=min(f[i][j 1]+cost[s[
阅读全文

浙公网安备 33010602011771号