随笔分类 -  DP

摘要:思路: 题目要求最多能送多少个外卖,不妨转换思路,求怎么在相同的送外卖情况下花最少的时间。 这种解法不仅便于设计程序,而且正确性显然:求出这个状态的最小时间,就越有可能转移到能取最优值的那个状态上面。 于是使用利于理解的记忆化dfs,记录当前点是哪个,各包裹的状态(0/1/2,0表示没动,1表示拿在 阅读全文
posted @ 2022-01-11 16:30 GUO_dx 阅读(149) 评论(0) 推荐(0)
摘要:分析:用数位dp的方法去做,记录好last是啥,然后前面是前导零的话后一位可以选择前导零,前面不是的话后一位不能是前导零。最后判断这个数合不合法。注意一开始lead和limit都是1 code: #include<iostream> #include<cstdio> #include<cmath> 阅读全文
posted @ 2021-09-12 17:18 GUO_dx 阅读(33) 评论(0) 推荐(0)
摘要:题目大意: 把一段长为n的序列分成k组(每组是连续的一段),然后玩家不停地操作: step 1: 找到第一个没被全灭的组 step 2: 把这个组里灭了的 t[i] 全加起来,然后把新的没被灭的 t[i+1]也加进去 step 3: 最后从Σt中随便选一个,删去它代表的位上的数。意思就是第i+1个数 阅读全文
posted @ 2021-08-10 20:43 GUO_dx 阅读(58) 评论(0) 推荐(0)
摘要:C: 题目传送门 题意: 求n个小于2^k的数 a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an 的数量 分析: 首先玩一下小样例,考虑第i位 如果有奇数个a,那么如果第i位1的个数是奇数且至少有一个0,会让结果小于,否则一定等于。那第i位就有 (2n- (2n-1) ) 种可能取的情况。 如 阅读全文
posted @ 2021-08-10 13:53 GUO_dx 阅读(90) 评论(0) 推荐(0)
摘要:数位DP,到每个position时,都可以从这个position开始,也可以继承前面的数。 #include <bits/stdc++.h> using namespace std; #define File(x) freopen("(x)","r",stdin) #define pf printf 阅读全文
posted @ 2021-07-19 10:06 GUO_dx 阅读(57) 评论(0) 推荐(0)
摘要:很好的一道树上DP 我会告诉你我想那个“-2”想了一个下午吗? 题面: 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道 阅读全文
posted @ 2020-11-24 17:50 GUO_dx 阅读(81) 评论(0) 推荐(0)
摘要:悬线法 即计算出一个图形中最大矩形面积的DP方法 代码如下,很好懂 up[i][j]是指的高 #include<bits/stdc++.h> #define maxn 2001 using namespace std; int res[maxn][maxn],left[maxn][maxn],rig 阅读全文
posted @ 2020-11-22 16:31 GUO_dx 阅读(102) 评论(0) 推荐(0)
摘要:####题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串(该字串以每行 20 个字母的方式输入,且保证每行一定为 20 个)。要求将此字母串分成 k 份,且每份中包含的单词个数加起来总数最大。 每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串 th 阅读全文
posted @ 2020-10-27 20:49 GUO_dx 阅读(131) 评论(0) 推荐(0)