dp
霾まる
不为牌子, 只为锻炼自己, 创造美好回忆不后悔!
展开
-
CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!) A-D
丁真和珍珠宝可梦对决, 每个宝可梦都有x战力, 假设有两个宝可梦, 其战力分别为a和b(a>b), 战力为a的宝可梦获胜后战力-b, 而战败的宝可梦会消失最后还有宝可梦的人获胜问你丁真和珍珠谁赢了。原创 2023-06-26 20:05:21 · 2205 阅读 · 9 评论 -
23.3.8打卡 AcWing 1072. 树的最长路径 树形dp
在每次dfs时, 遍历此节点的所有儿子, 获取其儿子到叶子结点的最长路径, 每次遍历都更新维护一个最长路径和次长路径。所以对于每个子节点, 必须和他的父亲节点相连, 我们要找的是最长路径, 从根节点开始搜的话需要找到。直接讲dfs的过程, 存图用前向星, 前向星的基础知识就不讲了。当dfs回到根节点时, 此时维护的最长路径和次长路径就是。整理一下输出最大值(是最长路径和次长路径的最大值)即可。注意最后一个最长路径和次长路径的和不一定是最大的。因为是树的最长路径, 所以中间不能断开(原创 2023-03-08 20:35:15 · 356 阅读 · 0 评论 -
23.2.2打卡 2023牛客寒假算法基础集训营5 ABCDHKL 最详细的一集
因为要使得字典序最小, 谁也不愿意多拿, 到自己拿的时候必须拿所以拿一个最小的1。当n=3时, 先手拿一个后手拿一个, 下一回合先手拿一个拿完了 ,此时后手胜利。这题因为排列是不确定的, 所以能够给我们判断的就是第一位数的数字是不是0。当n=2时, 先手拿一个后手拿一个结束了, 双方字典序一样平局。还有两个特判, 需要特判a和b是否相等, a和b的位数是否相等。当n为奇数时, 先手必输, 当n为偶数时, 只能必定平局。比较去掉前导0的位数, 再比较a和b有效位数中的最高位0。原创 2023-02-02 18:02:37 · 210 阅读 · 0 评论 -
22.1.31打卡 2023牛客寒假算法基础集训营4 ABCDEFLM
来到过程的实践阶段, 我们先手直接开头砍了一刀, 然后对剩余的血量计算每个t间隔的扣血量(at*av), 用剩余血量除扣血量, 在看一下能不能整除, 不能整除就+1。最后 valn - val就是差值了, +1是因为题目中说了要让i成为"必选", 当i = 最大值时, 不是必选情况。因为攻击是从时刻1开始的, 所以要+1, 又因为当最后一刀斩杀时, 不计算后摇时间, 所以ans要-1。狂wa8发被整了心态就润了, 最后发现特判出了问题, 改了就对了, 好似喵。*t是因为要计算后摇时间(或者说冷却时间)原创 2023-01-31 23:36:48 · 210 阅读 · 0 评论 -
22.1.29打卡 2023牛客寒假算法基础集训营1 ACDHKLM
因为一个拼图的总成本是固定的, 那我们只要减去其他已知拼图的成本就能得到这最后一个拼图的成本了。题目一大串的, 读起来麻烦还要理解, 但静下心来仔细读一读就发现这题很简单。f [ i ] [ j ] 表示给分了 i 个人 j 个仙贝收获的好感度值。那么每个讲师每人随便拿一个论文就行了, 只要hi不为0都有1的贡献。网上高质量题解太多了, 我这就作为打卡日报随便写写。和dfs没什么关系, 求的是最后一块拼图的成本。一个论文为答案提供的贡献最大值就是1。c d记录两队最多还能获得的得分。这是来自官方题解的图。原创 2023-01-29 21:58:38 · 552 阅读 · 0 评论 -
22.12.16打卡 Codeforces Round #838 (Div. 2) A~C
全部变成2的n次方就好了, 用个highbit。找最小的改变奇偶性的次数就行了。原创 2022-12-16 18:18:41 · 210 阅读 · 0 评论 -
22.12.13打卡 CF1766C
给你两个字符串, 从随意一个B点开始走(只能上下左右走), 要求必须走完全部B, B只能走一次, 且W不能走。用两个数组存储路径状态, 记录一下左边端点和右边端点, 从一侧端点走到另一侧端点时状态转移。一看标签DFS感觉非常陷阱, 就两个字符串感觉没有dfs的必要, 应该有更简单更快的写法。看到这个样例, 很明显了提示了B只能走一次的特性, 在这个样例中。这两个结构很明显只能从B的左侧(右侧)走过去。那么找到这三个规律之后, 状态转移就很好办了。于是开始找规律, 用题目给的样例找规律。原创 2022-12-13 16:45:53 · 413 阅读 · 0 评论 -
22.12.10补卡 最长上升子序列
now每一次都增加当前数组元素arr[i], 且r++, 因为存在不选任何元素的方案, 那么max.sum的下限就是0, 每当now.sum原创 2022-12-12 17:08:36 · 280 阅读 · 0 评论 -
22.12.1打卡 漫步校园 记忆化搜索
题目里很显然只走最短路, 直接用bfs从终点到起点搜一遍将每一步到终点所需要的最短的时间存在一个dis数组中, 然后你就会发现原来的地图变成了这样。对的, 非常地相似, 接下来的操作和滑雪基本一样, 只不过起点是(1,1) 终点是(n,n)上面是地图下面是dis数组, 再看看。原创 2022-12-01 18:47:22 · 534 阅读 · 0 评论 -
22.11.24补卡 HDU-1078 FatMouse and Cheese 记忆化搜索
同滑雪的模板题, 滑雪是从高向低滑, 这题是从小吃到大, 区别基本只有这一个。用一个dp数组(记得初始化)记录经过此路的路径, 然后正常dfs搜。原创 2022-11-30 16:34:28 · 251 阅读 · 0 评论 -
22.11.26补卡 POJ2192 Zipper 记忆化搜索
用一个数组维护访问过的数组长度, 然后持续向前搜就好了, 第三个字符串中必定会有对应的字符, 没有就输出no。一开始还想了好一会这题怎么做, 结果写起来发现思路还是挺简单的。因为没注意到第三个字符串边界是2*N wa了两发...原创 2022-11-30 12:22:51 · 270 阅读 · 0 评论 -
22.11.30打卡 记忆化搜索2水题
和上一题基本一样, 就是需要注意空间, 我自己试的第二维度开6e5能过。需要注意的只有当数组下标为负数的时候需要特判一下。记忆化搜索模板题, 个人认为比滑雪还简单。其余直接照抄题目就能过了。原创 2022-11-30 11:46:09 · 223 阅读 · 0 评论 -
22.11.22补卡 可爱の星空 记忆化搜搜
代价为u连通块大小 - v连通块大小, 那么只要优先把连通块大小一样的合成就不会产生代价。但是连通块为奇数时, 必定会产生代价, 判断一下就好了。原创 2022-11-28 16:16:16 · 227 阅读 · 0 评论 -
22.11.11打卡 牛客小白月赛60(A~C)
每一步都有两种选择, 不拿这个物品的话则继承上一个物品的长度;拿这个的话接下来k步都不能走。状态转移方程f[i]=max( f[i+1] , f[i+k+1]+a[i] )先算出每个房间有多少个出口的总和, 然后减去有敌人的那个出口的个数就行了。参考数塔类型dp, 这里倒着dp, 从第n个开始选。记得把算总和放在循环外面...这给我t掉了人麻了。没算复杂度的惨案...原创 2022-11-11 20:37:38 · 366 阅读 · 0 评论 -
22.11.7打卡 22牛客寒假6D删除子序列
每当s1和s2字符匹配时, 判断子串前一个字符是否在主串中出现过, 若出现过, 则f[j]++, 表示字符j在主串中出现的次数 (这样保持顺序的状态)思想就是: s1的所有字符都和s2分别比较, 比较成功fij+1, 并继承从前的比较的状态从而找到最大公共子串。题意是: 给定两个字符串a和b, 若b是a的子串, 求a有多少个b存在。而这题是找最多公共子串, 在已知子串的情况下不需要这一句状态转移。利用LCS的思想改造一下。刚学了LCS就遇到这题。原创 2022-11-07 20:52:07 · 469 阅读 · 0 评论 -
22.11.6打卡 POJ-2192 LCS
一开始我就用了两个LCS来写, 结果wa了, 百思不得其解, 看了一眼POJ上的discuss。注意a和b的字符顺序不能乱 例如cat tree 不匹配 acttree。也就是说 cat tree 和catree是不匹配的, 一语道醒梦中人。写了个map判断a+b的字符数量是否=s的字符数量 ac了。如果a和b的字符能组成s 输出yes。给定三个字符串a b s。原创 2022-11-06 16:35:31 · 528 阅读 · 0 评论 -
22.11.4打卡 POJ - 1631 最长非降子序列
因为只需要搜索第一个大于arr[i]的数组元素, 没必要用Oi的复杂度一个个找, 故使用二分优化。原创 2022-11-04 20:30:20 · 479 阅读 · 0 评论 -
22.11.3打卡 HDU-1069
保证每一个f[i]时刻为最优解, 那么就可以通过f[j]+saru[i].z找到整个方块全部的最大值。状态转移方程f[i]=max(f[i], f[j]+saru[i].z)表示第i个为上面的方块, 依次向下枚举找下一个方块的最大值。把题目中说的6种排列方式分别存储, 然后从小到大排序。原创 2022-11-03 20:41:04 · 458 阅读 · 0 评论 -
HDU-2084 数塔 简单DP
因为要取最优解, 如果从头开始往下dp的话需要考虑n种分支, 属于问题复杂化, 我们可以倒着dp, n种情况最后归为1种。如此循环n-1次, 那么最后一次就会使得f[1][1]为最大。对于n-1层的每个方块可以在下面两个方块中取最大值。原创 2022-11-02 20:19:01 · 85 阅读 · 0 评论 -
22.11.2打卡 HDU-2571 简单DP
而且最后一种走法必须向前更新, 不能向后更新, 否则会被覆盖。向下走, 向右走, 向右走k步(k为当前列的倍数且k>1)使用这种写法会出现原地不走的选项, 是错误的。注意, 这题不能原地踏步。原创 2022-11-02 19:09:10 · 616 阅读 · 0 评论 -
22.11.1补卡 HDU - 2501简单dp
那么, 对于一个2*2的格子, 一共有3种方法组成: 一个2*2的骨牌, 两个2*1的骨牌(2种组合)很容易想得到2*1的骨牌可以组合成2*2的骨牌, 并有两种组合方法。可以得到状态转移方程 f[i]=f[i-1]+f[i-2]*2。一共有2*n个格子, 有2*1和2*2的骨牌, 要把格子铺满。原创 2022-11-02 14:56:33 · 505 阅读 · 0 评论 -
10.12补卡 滑雪
使用一个f数组存储动态规划后的值, 当这个值不为空的时候, 说明这个结果已经被搜过了, 可以直接返回(记忆化), 使用递归的方式进行搜索。写完板子我对记忆化搜索的理解就是: dfs上套一个dp的操作。目前的理解就是这个, 之后还会写记忆化搜索的提加深理解。记忆化搜索板子题滑雪。原创 2022-10-13 20:03:56 · 788 阅读 · 0 评论 -
10.10 CF - 520B
从后往前贪心, 当m小于n的时候只有一种可能就是m不断++到达n, 当m大于n的时候需要/=2, 注意要特判下当m为奇数的时候。另一种记忆化搜索, 我还不是很理解这种做法, 我一开始写的dfs有问题, 看了记忆化搜索题解, 这种做法还在学习中...这题有两种写法, 一种贪心。原创 2022-10-10 17:51:37 · 1047 阅读 · 0 评论 -
10.9补卡 CF-189A
题意是给你一个长度为n的彩带和abc三段的长度, 要求剪的长度每一段都为abc长度,题目里没说不能有剩下的彩带这个条件害我wa了好几发,,,最后一看是多重背包。原创 2022-10-10 09:33:22 · 961 阅读 · 0 评论 -
P1006 [NOIP2008 提高组] 传纸条(四维dp)
题目链接:[NOIP2008 提高组] 传纸条 - 洛谷这题没有思路的可以先看[NOIP2000 提高组] 方格取数 - 洛谷两题的思路差不多, 方格取数的思路更好想一点和方格取数一样, 两个人同时走不同路径, 求到达时候的权值最高, 和方格取数唯一不同的是两个人的起点和终点都不一样, 注意一下不能走相同的路和边界就好了ac代码:...原创 2022-07-07 17:59:39 · 143 阅读 · 0 评论 -
P1004 [NOIP2000 提高组] 方格取数(四维dp)
题目链接:[NOIP2000 提高组] 方格取数 - 洛谷题目要求找出两条路线, 使得权值最大, 因此创建一个四维数组, 前两位存第一个人走的路径, 后两位存第二个人走的路径, 两个人同时走(类似于dfs), 注意一下两个人不能走相同的路径就好了ac代码:...原创 2022-07-07 17:54:43 · 147 阅读 · 0 评论 -
P1064 [NOIP2006 提高组] 金明的预算方案(01背包变式)
题目链接:[NOIP2006 提高组] 金明的预算方案 - 洛谷01背包的变式, 其实只要思路对这题就很简单, 只要写4个01背包的状态转移方程就可以了这题在状态转移的选择中一共有五个情况: 1, 什么都不买2, 只买主件3, 买主件和附件14, 买主件和附件25, 买主件和附件1, 2对于2 3 4 5的条件写在01背包的模板中就可以了ac代码:......原创 2022-07-06 23:38:55 · 181 阅读 · 0 评论 -
P1063 [NOIP2006 提高组] 能量项链(区间dp)
题目链接;[NOIP2006 提高组] 能量项链 - 洛谷区间dp题, 题目已经明示项链, 说明成环状的, 录入数组元素的时候让其下标+n=该下标下的元素即可:接下来就是关于区间dp的状态转移方程, 所谓区间dp, 无非就是两个区间合并产生额外的值, 让你求最终最大的值或最小的值.这题是非常典型的区间dp, 对于这题来说, 我们需要枚举左区间和右区间再加上两个区间合并的值, 即状态转移方程: 从j到i的这一段区间可以有(i-j-1)个合成方式, 这时候就需要k来枚举每一次的合成, 取最大值ac代原创 2022-07-06 18:16:16 · 231 阅读 · 0 评论