DP
文章平均质量分 70
黑炭保安
这个作者很懒,什么都没留下…
展开
-
第十二届蓝桥杯C++组省赛B组题解(A -- G)
目录A.空间B.卡片C.直线 A.空间 已知: 1MB = 1024KB 1KB = 1024B 一个数组单元占用4B的字节内存,所以答案为 256 * 1024 * 1024 / 4 = 67108864 B.卡片 用一个数组存每种卡片还有多少张,再用一个循环遍历每个要凑的数,当卡片数不够了就输出答案 int a[10] = {2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021}; int main() { for (int i原创 2021-12-19 17:16:53 · 4326 阅读 · 0 评论 -
Acwing 2770.方格取数
方格取数链接 目录题意阅读理解状态表式思路过程核心代码 题意阅读理解 有一个矩阵,每个格子里都有一个数 ,每次经过都可以得到这个数的权值,每个格子只能走一次,能向右向上向下走,求从左上角(1,1)到右下角(n,m)路过权值最大的值 可以注意到,这次是可以往上走的,所以如果用普通的线性状态转移方程f[i][j] = max(f[i + 1][j],f[i][j - 1]) + w[i][j];是肯定不行的,因为可以向上走,而如果max里面再加一个f[i - 1][j]的话,就会出现重复走的情况,这就是这个题的原创 2021-08-07 15:04:43 · 174 阅读 · 0 评论 -
线性DP的中等题-----------传纸条
线性DP的中等题-----------传纸条 题目链接(源自Acwing) 题意大概就是 :一个点只能向右,向下走,从左上角走到右下角,然后再从右下角走到左上角,不能走到相同的点,求路径的权值最大值。所以可以讲题意简化成: 从左上角到右下角,走两条路,求路径的权值最大值 但是! 这里是不可以直接用简单的线性DP方程的 f[i][j] = max(max(f[i][j], f[i - 1][j]), f[i][j - 1]); 因为这个样子的,没有考虑到不能重复走一个点的情况,第一次就走完整个路径的最优.原创 2021-07-16 15:49:07 · 269 阅读 · 1 评论 -
01背包问题的详解
DP背包问题 . 01背包问题链接 二维版本 . 我们可以用一个二维数组f[i][j]来存我们的答案,其中一维的f[i]表示的是选了i个物品下的最优解,二维的f[j]表示的是选了体积为j的物品下的最优解,所以f[i][j]的解释就是选了i个物品下j体积的最优解,所以我们的输出的最终结果就是f[n][m] . 其中f[i][j]就要通过f[i - 1][j]来推导得,例如我们在选第i个物品的时候,我们有两个选择,选这个物品还是不选,不选的话我们保留就是f[i - 1][j],选的话结果就是f[i - 1][原创 2021-07-10 17:17:15 · 280 阅读 · 4 评论