摘要: 就是f[i][j]i和j表示的是第i行第j列 与别的没有区别 1.传纸条 往返两条路,实际上就是从起点分别走两条不相交的路,使其两条路上的总和最大 正常的话就用四层循环分别表示两条路各自点的坐标 f[x1][y1][x2][y2]=max(f[x1-1][y1][x2-1][y2],f[x1-1][ 阅读全文
posted @ 2024-02-17 22:12 shaoyufei 阅读(42) 评论(0) 推荐(0)
摘要: 最抽象的一个dp,出的题跟它八竿子打不着关系 简单来讲,就是外层循环从1到n遍历一遍,内层循环更新维护1到n-1的最大值 下降的话就从n到1遍历,更新维护n-1到1 1.最长上升序列 没什么好说的 #include<bits/stdc++.h> using namespace std; #defin 阅读全文
posted @ 2024-02-17 21:33 shaoyufei 阅读(37) 评论(0) 推荐(0)
摘要: 1.合并石子 (1)排成一列的石子 这个与合并果子唯一的不同就是只能合并相邻的石子,所以贪不得(怎么所有类型的动规要先上来搞贪心,有点diss贪心的感觉) f[i][j]表示i到j间合并的最大/最小得分; 核心 for(int len=2;len<=n;len++){//表示长度2到len时的最大 阅读全文
posted @ 2024-02-17 18:08 shaoyufei 阅读(23) 评论(0) 推荐(0)
摘要: 1、01背包 f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])二维为背包现有容量,一维为前i个物品 表示在前i个物品所能选取的最大价值 在判断第i个的最大值时要由前一个的状态转移过来;即下一层的状态由上一层转移来; 可以直接省掉第一维(压维),从后往前更新过来,若还是 阅读全文
posted @ 2024-02-17 14:18 shaoyufei 阅读(35) 评论(0) 推荐(0)