递推DP
Winterfell30
这个作者很懒,什么都没留下…
展开
-
Codeforces 571B Minimization (DP)
题意有一个n个数的序列,给出一个k,可以通过对序列重排让∑n−ki=1|Ai−Ai+k|\sum_{i=1}^{n-k}|A_{i}-A_{i+k}|最小,求最小值。思路题目相当于分成k组,使得{0,k,2k…},{1,k+1,2k+1…}等这些序列分别的序列更小。 显然对于每一个链就是排序之后得到的绝对值的和最小,通过列项相消就能得到对于序列i他的结果就maxi−minimax_i-min_i原创 2016-06-17 15:04:03 · 471 阅读 · 0 评论 -
LightOJ 1051 Good or Bad (递推DP)
题意如果一个字符串含有连续的3个元音或者连续的5个辅音那么他就是bad的,否则他就是good的,字符串中含有’?’,’?’有可能是任何字母,如果因为问号不确定的话就是mix。思路因为数据很小所以刚开始直接考虑模拟,但是问号的处理很麻烦,换成了dp的做法。 dp的方程还是比较显然的,但是同样是mixed不太好判断。 dp[0/1][i][j]表示在i前第j个位时元音和辅音的情况,最后判断good即原创 2016-06-16 00:02:06 · 477 阅读 · 0 评论 -
HDOJ 2457 DNA repair (AC自动机+DP)
题意给出一些子串和一个DNA串,求最少需要变换多少个字符可以让这个DNA不包含任意一个子串。思路dp[i][j]表示在字符串i处在trie图的节点j处时的最小改变数。 然后对字符串和每个节点都枚举递推一遍就行了。代码#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <ve原创 2016-06-03 21:28:18 · 516 阅读 · 0 评论 -
HDOJ 3415 Max Sum of Max-K-sub-sequence(线段树优化DP)
题意给出一个环,求连续的k个数字中连续和最大是是多少,子串的开始下标和结束坐标是多少。思路第一次做这题的时候是在学单调队列的时候,单调队列的做法戳这里 这里我是直接dp搞,dp[i]=sum[i]−min(sum[j])i−k<=j<idp[i] = sum[i] - min(sum[j]) i - k <= j < i 显然直接做复杂度O(nk)是超时的,就用线段树维护一下min(sum[j原创 2016-05-20 21:14:49 · 426 阅读 · 0 评论 -
Codeforces 667C Reberland Linguistics (DP)
题意给出一个字符串,选出大于4个字符当前缀,然后把后面的字母分成2个或者3个的小字符串,要求每个字母都要包括并且在同一个分词方案里面没有连续的相同小字符串,字典序输出所有可以分出来的小字符串。思路刚开始我枚举出所有除去末尾剩一个字母的可能的后缀串,然后WA6了,然后想到有可能会有xxxxxabab这种,然后特判了一下还是WA6,然后想到xxxxxababab这样也不会有ab,然后感觉再特判一下可能还原创 2016-05-01 16:58:42 · 1037 阅读 · 1 评论 -
HDOJ 5745 La Vie en rose (bitset优化DP)
题意字符串s和p,p可以交换相邻两个字符的位置但是只能交换一次。求每个s[i]到s[i+len(p)-1]是否能由p变化得到。思路dp[i][j][0/1/2]分别表示在s的i位置和p的j位置时p[j]与p[j-1]交换、不交换、与p[j+1]交换时是否能变换得到。 因为dp是一个bool数组所以我们可以用bitset表示第一维也就是母串的匹配情况,第二维滚动一下。对于s[i]和p[j]的匹配情况原创 2016-10-23 21:53:29 · 471 阅读 · 0 评论