随笔分类 -  动态规划

摘要:"不要62" 参考: " HDU2089 不要62 标准数位DP " 从最高位开始递归,如果有4或者62则不往下走。 表示的是有 位数字,且第 位数字为 并满足题给条件的数字的个数 其实也就是记忆化搜索的感觉,保留搜过的状态,以避免重复运算。 代码: 阅读全文
posted @ 2019-11-09 16:48 caoanda 阅读(179) 评论(0) 推荐(0)
摘要:"windy数" 参考: " 题解 P2657 【[SCOI2009]windy数" " windy数 数位dp练习题——只要学了数位dp就异常简单的题 " 用数位dp解决这个问题。 数位 DP 问题往往都是这样的题型,给定一个闭区间 ,让你求这个区间中满足 某种条件 的数的总数。 对于 : 表示具 阅读全文
posted @ 2019-11-09 14:45 caoanda 阅读(185) 评论(0) 推荐(0)
摘要:" E. Yet Another Division Into Teams " 首先要想明白一个东西,就是当一个小组达到六个人的时候,它一定可以拆分成两个更优的小组。 这个题可以用动态规划来写,用一个数组来保存状态,用一个队列来尝试新的状态,但是因为上面的这个特性,每一次只会有三个新的状态。 我们用 阅读全文
posted @ 2019-11-07 14:59 caoanda 阅读(233) 评论(0) 推荐(0)
摘要:"L Common Subsequence" 参考: "ACM POJ 1458 Common Subsequence (最长公共子序列,动态规划)" 思路:二维动态规划。 :在截止至 的`i 1 s2 j 1`位置,两个串的最长公共子序列长度。 动态规划方程: 即如果 ,则表示当前最长公子序列可加 阅读全文
posted @ 2019-11-05 14:13 caoanda 阅读(182) 评论(0) 推荐(0)
摘要:"K Jury Compromise" 参考: "ACM POJ 1015 Jury Compromise(陪审团的人选,动态规划题,难)" 说实话真有点难想,用一个 来表示在选取 个人,辩控差为 (`j for`循环来更新这个值。具体思路还是看参考博客吧.... 优先队列默认 是最大值,如果写成 阅读全文
posted @ 2019-10-31 14:32 caoanda 阅读(189) 评论(0) 推荐(0)
摘要:"J FatMouse's Speed" 的题写得多了慢慢也有了思路,虽然也还只是很简单的 。 因为需要输出所有选择的老鼠,所以刚开始的时候想利用状态压缩来储存所选择的老鼠,后面才发现 太大`1 思路的话其实也不难,把体重排序之后,对速度求一个最长下降子序列即可。 对于每一次求最长有序子序列,只需要 阅读全文
posted @ 2019-10-29 15:47 caoanda 阅读(173) 评论(0) 推荐(0)
摘要:"I 最少拦截系统" 参考: "ACM HDU 1257 最少拦截系统" 、 思路:这个题其实是个贪心,每一次只需要找到一个离当前导弹高度最近的一个拦截系统进行拦截,即是最优解。 代码: cpp // Created by CAD on 2019/10/26. include using names 阅读全文
posted @ 2019-10-26 19:54 caoanda 阅读(235) 评论(0) 推荐(0)
摘要:"H Tickets" 参考: "Tickets——H" 思路:对于每一个买票的人来说,只需要决定他是自己买票还是跟前面的人一块买票即可。 假设三个人 A B C,当 C 要跟 B 一块买票的时候,B 不能够跟 A 一起买。 那么状态方程就应该是 ,保证了不会有一个人跟两个人一块买票的情况。 想清楚 阅读全文
posted @ 2019-10-26 19:14 caoanda 阅读(765) 评论(0) 推荐(0)
摘要:"G 免费馅饼" 参考: "免费馅饼\~ \~(hdu 1176)" 思路:刚开始始的时候想 ,但是数据太多了,而且有些情况也会漏掉。 于是 是最好的选择,但是 的时候又要考虑到一点,起始位置是固定的,无法确定最大值与起始位置的联系,所以,需要反着来算,从最后一秒开始计算,对于每一个时间点,每一个位 阅读全文
posted @ 2019-10-26 17:32 caoanda 阅读(289) 评论(0) 推荐(0)
摘要:"E Super Jumping! Jumping! Jumping!" 思路:就是按照求最长有序子序列的思路来写,跟 "Monkey and Banana" 的思路大同小异。 代码: cpp // Created by CAD on 2019/10/26. include using namesp 阅读全文
posted @ 2019-10-26 14:13 caoanda 阅读(112) 评论(0) 推荐(0)
摘要:"D Doing Homework" 参考: "ACM HDU 1074 Doing Homework(位运算,搜索,状态压缩DP)" 思路:因为每个作业给定的顺序就是按照字典序的顺序,所以不用再多去比较。 该题的 不大,同时我们又想用 来完成这道题,那么一个很好的办法来储存状态,就是状态压缩,利用 阅读全文
posted @ 2019-10-26 12:33 caoanda 阅读(775) 评论(0) 推荐(0)
摘要:"C Monkey and Banana" 参考: "ACM HDU 1069 Monkey and Banana (动态规划)" 思路:对于这道DP题来说,如果以高度或者说砖块的个数来作为储存的状态的内容,显然是不合适的。 不难看出,这道题主要是想求一个 "最长有序子序列" ,那么我们首先把所有可 阅读全文
posted @ 2019-10-17 20:09 caoanda 阅读(365) 评论(0) 推荐(0)
摘要:"A Max Sum Plus Plus" 参考: "HDU 1024 Max Sum Plus Plus(动态规划,给定一个数组,求其分成m个不相交子段和最大值的问题)" 思路:想了好久好久...才把它想懂。但是还是不明白为什么最初的代码会WA 用 来写这道题,最原始的公式为`dp[i][j]=m 阅读全文
posted @ 2019-10-16 19:33 caoanda 阅读(189) 评论(0) 推荐(0)
摘要:"Tiling_easy version" 思路:关于 这种东西,有一点必须要想明白,就是状态与状态之间的转换关系,就比如说要求5个骨牌的方案数,因为有两种骨牌,那么可以用 +两个横着的骨牌或者一个 的骨牌,或者是 +一个竖着的 骨牌来构成,那么递推的公式就是 代码: cpp // Created 阅读全文
posted @ 2019-10-10 19:09 caoanda 阅读(214) 评论(0) 推荐(0)
摘要:"打地鼠Ⅱ" 这个也是一个 dp ,可能是我 dp 的题写的太少了吧,后面得多练练 dp 的题。 思路:把所有的数据存于一个结构体中,然后进行排序,排序的规则是,时间短的优先,分数高的优先。 :表示打 个地鼠可以得到的最大分数 最后求 的时候需要在所有的 中找到最大值,因为,可能出现打的地鼠较少但是 阅读全文
posted @ 2019-08-21 16:41 caoanda 阅读(227) 评论(0) 推荐(0)
摘要:"聚餐" 赛后来看真的感觉是一道很简单的题,其实赛中就已经有点思路了,但是 wa 了很多发,可能是因为代码改过了很多版所以思路有一点乱吧,补题的时候就是把整个题的思路都理清了之后才开始敲的代码,思路理顺了之后,写起来就很流畅了,几分钟就写完了,一发 Ac。要是下次还是一直 wa 的话就尝试一下,重头 阅读全文
posted @ 2019-08-21 13:43 caoanda 阅读(159) 评论(0) 推荐(0)
摘要:"小菜吃鸡腿" 特别裸的区间 dp ,而且之前还写过一样的题,居然没写出来,55555,主要还是因为把区间 dp 的思路给忘了 区间 dp 的主要思路:假设有一段区间 ,当 和`r [l,r] k`使得这整个区间 的值为最大(即满足题目要求)。 整理一下区间 dp 的几个步骤: 总共三个 第一个 遍 阅读全文
posted @ 2019-08-21 12:39 caoanda 阅读(187) 评论(0) 推荐(0)