随笔分类 -  动态规划

摘要:要点 是树形的考虑dfs 分为取一枝,取两枝两种情况,将它们的合法情况进行暴举取最好答案即可,貌似我乱搞得相当冗…… 顺手记忆化 正解应该是树上背包 树上背包版,j k要使用上个儿子的所以j倒序: C++ include include include define pb push_back usi 阅读全文
posted @ 2019-04-25 12:39 AlphaWA 阅读(221) 评论(0) 推荐(0)
摘要:走格子拿分数,直接弄dp[i]是到了第i格的最大得分可以发现是假的。 于是此题设f[i][j][k][t]代表四种步伐各用了几次可以得到的最大得分,到达的点可以直接算出来,就好转移了。 C++ const int maxn = 355; int N, M; int a[maxn], cnt[4]; 阅读全文
posted @ 2019-04-25 11:16 AlphaWA 阅读(166) 评论(0) 推荐(0)
摘要:要点 假设第i个最后总共选的值为ci,不妨把它分成两部分:$$c_i=cnt'_i L+q_i$$$$L=840,\ 0 W; rep(i, 1, 8) cin cnt[i]; memset(dp, 1, sizeof dp); dp[0][0] = 0; rep(fakei, 0, 7) { re 阅读全文
posted @ 2019-04-11 22:16 AlphaWA 阅读(362) 评论(0) 推荐(0)
摘要:传送门 与Codeforces1107G一起食用 思路 想到要用dp……然后常规地设dp[i]为推倒前i个牌的最小花费 有两种情况:一是当前这个推,二是不推而被别人推。对于第一种,需要找到这个左推(因为扫到这里他是最后一个所以不用右推)的最远处,于是有了预处理每一位的最左边;对于第二种,巨弱鲁莽地优 阅读全文
posted @ 2019-04-10 22:05 AlphaWA 阅读(158) 评论(0) 推荐(0)
摘要:常规的dp,当前有值且碰不到管子就转移,可以连跳的操作我就加了一维表示当前是不是连跳过来的。第二问前缀和即可得(不对啊边走边记录就行了吧我冗了Orz)。 C++ include include include using namespace std; const int maxn = 1e4 + 5 阅读全文
posted @ 2019-04-10 12:33 AlphaWA 阅读(137) 评论(0) 推荐(0)
摘要:题目传送 记得这是我初学dp时的一道题 虽说就像LCS一样搞一搞即可 ~~但我还是写挂了qwq~~ C++ include include include using namespace std; char s[2005], t[2005]; int dp[2005][2005]; int main 阅读全文
posted @ 2019-04-10 09:04 AlphaWA 阅读(154) 评论(0) 推荐(0)
摘要:dp[i][j][k]表示第i位填数字k时,与后面的相连模数为j时,后面的数字最小填多少。 测得我提心吊胆还以为复杂度高了,结果出来46ms还是cf评测姬强啊。 阅读全文
posted @ 2019-04-08 22:01 AlphaWA 阅读(162) 评论(0) 推荐(0)
摘要:dp[i][j][0/1]:第i天处于第j状态要不要吃。 阅读全文
posted @ 2019-04-08 10:23 AlphaWA 阅读(170) 评论(0) 推荐(0)
摘要:题目传送 先给出设计dp的结论: dp[i][j]:以第i个位置、以rankj的数 拓展出去 的方案数。意会一下,我实在想不好语言…… 其中所谓rankj=真·rank\%11 找到拓展的规律,转移也就顺理成章了。不妨先看1~9拓展到的二位数里有哪些是合法拓展: $$Rank1\%11=1:所以数字 阅读全文
posted @ 2019-04-07 13:39 AlphaWA 阅读(558) 评论(2) 推荐(0)
摘要:怎么就没人解释一下为啥用b排序可以保证正确性呢……太菜了,理解了好久。 时间流逝价值会丢失的背包,类似题洛谷1417 本题与洛谷1417不同之处在于流逝是有截止的。 1.这个dp[j]的含义是:最后跑路时欠了j个费所得到的最大钱数。 2.假设是不排序的,直接去背包,考虑两种转移,一种是选了当前这个以 阅读全文
posted @ 2019-04-05 03:40 AlphaWA 阅读(217) 评论(0) 推荐(0)
摘要:这个数位dp倒是没什么限制条件,只是需要在过程中把每个数字出现次数记录一下即可。记忆化返回时数学算出。框架还是套板子。 阅读全文
posted @ 2019-04-03 17:08 AlphaWA 阅读(181) 评论(0) 推荐(0)
摘要:数位dp第二道~就当成搜索,套板子写了写。我写的dp[pos][pre][state0]记录的是当前pos位没有限制时、前面的数是pre时、前面是否都是0时的方案数。 阅读全文
posted @ 2019-04-03 14:45 AlphaWA 阅读(234) 评论(0) 推荐(0)
摘要:喜闻乐见的数位入门第一道,这个dp[pos][state]记录的是第pos位如果没有限制的话(有限制当然要搜一搜暴力数了),前一位 放6 or 不放6 的方案数。也就是并不是要求的答案,其实就是记忆化一下,减小搜索的复杂度,跟dp没啥关系吧…… 阅读全文
posted @ 2019-04-03 11:28 AlphaWA 阅读(137) 评论(0) 推荐(0)
摘要:据说这题是种dp的套路?然后被我国红名神仙(南大Roundgod)贪心了,不过思路上非常相近了,故而可贪吧。 设的dp[i][0]是:如果把第i个数放在上升序列里了,那么下降序列结尾的那个最大是多少;同理,dp[i][1]是:如果把第i个数放在下降序列里了,那么上升序列结尾的那个最大是多少。 个人y 阅读全文
posted @ 2019-04-02 19:32 AlphaWA 阅读(244) 评论(0) 推荐(0)
摘要:1.答案要取连续的区间疯狂暗示线段树。 2.外层枚举r,内层枚举l显然过于暴力。 3.考虑内层的优化。dp[i]:以第i位为结尾的答案(长度大于1的)。dp[i] = max(第一种情况,第二种情况)。解释一下,首先我们可以做到求出i前面gap[j] > gap[i],j < i最大的j的位置pos 阅读全文
posted @ 2019-03-29 22:24 AlphaWA 阅读(219) 评论(0) 推荐(0)
摘要:用solve(l, r, prefix)代表区间l开始r结束、带了prefix个前缀str[l](即l前面的串化简完压缩成prefix-1个str[l],加上str[l]共有prefix个)的最大值。 每层可以选择: 1.直接“提现”,把起始位和前面的“存款”直接提出来,再计算l+1~r区间的值; 阅读全文
posted @ 2019-03-29 16:01 AlphaWA 阅读(186) 评论(0) 推荐(0)
摘要:洛谷1387的进阶版,但很像。 1387要求是“全为1的正方形”,取dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]))吧?这个有“只有对角线可以有1”的要求,取的是dp[i][j] = min(dp[i-1][j-1], min(s1[ 阅读全文
posted @ 2019-03-26 15:38 AlphaWA 阅读(183) 评论(0) 推荐(0)
摘要:一看很像背包,然而值却是会随时间递减的(a - t*b),不能满足无后效性,于是考虑常用手段,先按照优先级排序。 这个优先级怎么定呢?列式子模拟一下。 洛谷题解说得很好了: 说来惭愧,其实这种“组合式”排序我也是第一次见,虽然很好理解: 最后记得各种longlong。 阅读全文
posted @ 2019-03-26 11:10 AlphaWA 阅读(261) 评论(0) 推荐(0)
摘要:1.涉及负数时同时维护最大和最小,互相转移。 2.考场上最大最小混搭转移WA,赛后发现如果是小的搭小的,大的搭大的就可过,类似这种: 于是猜测原因的话可能是:最大和最小的不一定是同一种方案,而P1、P2、P3这三种情况转移到现态必须是同一种方案转移过来? 阅读全文
posted @ 2019-03-23 21:18 AlphaWA 阅读(139) 评论(0) 推荐(0)
摘要:题是水题,学习一下用树状数组求LIS。 先离散化一下,注意去重;然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可。 如果是上升子序列,询问(a[i] - 1);如果是不下降子序列,询问(a[i])。 阅读全文
posted @ 2019-03-18 20:21 AlphaWA 阅读(204) 评论(0) 推荐(0)