02 2024 档案
摘要:分期集训第一天 这个坐标dp还是挺好理解的 hill从顶部往下更新,更新到同一层,再从左到右和右到左更新,两边的点特判一下 (听9G说因为有的点没更新可能是0,会影响同一层后面的更新,所以两边都跑,但网上题解大多都是再跑一遍,不知道为什么) 橱窗的话找旁边两位怨种帮忙改过的 馅饼看的题解 蛋糕特殊数
阅读全文
摘要:从这边抄(借鉴)的 这是一个完整的二叉树 把它变成直角三角形 下面用一维数组对应 删掉多余的叶子 这个就是树状数组 结论: 1.设C的某个元素下标为x,则这个结点(前缀和)的管辖区间是2^k个元素(其中k为x的二进制数的末尾0的个数),且该区间的最后一个元素为Ax 2.Cx的双亲结点下标y就等于x的
阅读全文
摘要:就是f[i][j]i和j表示的是第i行第j列 与别的没有区别 1.传纸条 往返两条路,实际上就是从起点分别走两条不相交的路,使其两条路上的总和最大 正常的话就用四层循环分别表示两条路各自点的坐标 f[x1][y1][x2][y2]=max(f[x1-1][y1][x2-1][y2],f[x1-1][
阅读全文
摘要:最抽象的一个dp,出的题跟它八竿子打不着关系 简单来讲,就是外层循环从1到n遍历一遍,内层循环更新维护1到n-1的最大值 下降的话就从n到1遍历,更新维护n-1到1 1.最长上升序列 没什么好说的 #include<bits/stdc++.h> using namespace std; #defin
阅读全文
摘要:1.合并石子 (1)排成一列的石子 这个与合并果子唯一的不同就是只能合并相邻的石子,所以贪不得(怎么所有类型的动规要先上来搞贪心,有点diss贪心的感觉) f[i][j]表示i到j间合并的最大/最小得分; 核心 for(int len=2;len<=n;len++){//表示长度2到len时的最大
阅读全文
摘要:1、01背包 f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])二维为背包现有容量,一维为前i个物品 表示在前i个物品所能选取的最大价值 在判断第i个的最大值时要由前一个的状态转移过来;即下一层的状态由上一层转移来; 可以直接省掉第一维(压维),从后往前更新过来,若还是
阅读全文