随笔分类 - 动态规划(DP)
UVa 1336 Fixing the Great Wall (区间DP)
摘要:题意:给定 n 个结点,表示要修复的点,然后机器人每秒以 v 的速度移动,初始位置在 x,然后修复结点时不花费时间,但是如果有的结点暂时没修复, 那么每秒它的费用都会增加 d,修复要花费 c,坐标是 pos,问你最少花费是多少。 析:dp[i][j][k] 表示已经修复了 i-j 区间,并且当前在
阅读全文
HDU 5904 LCIS (DP)
摘要:题意:给定两个序列,让你找出这两个序列的LCIS的长度。 析:DP a[i] 表示以ai结尾的最大值,b[i]表示以bi结尾的最大值。 代码如下:
阅读全文
POJ 2955 Brackets (区间DP)
摘要:题意:给定一个序列,问你最多有多少个合法的括号。 析:区间DP,dp[i][j] 表示在 第 i 到 第 j 区间内最多有多少个合法的括号。 代码如下:
阅读全文
HDU 4745 Two Rabbits (区间DP)
摘要:题意:给定一个圆形的环,有两个只兔子,一只顺时针跳,一个逆时针,但每次跳到的石头必须一样,问你最多能跳多少轮。 析:本来以为是LCS呢,把那个序列看成一个回文,然后就能做了,但是时间受不了。其实是一个区间DP,dp[i[j] 表示从 i 到 j 中最长的回文数。 代码如下:
阅读全文
POJ 1141 Brackets Sequence (区间DP)
摘要:题意:给定一个括号序列,让你添加最少的括号,使得所有的括号都匹配。 析:首先用DP来把这个最少的找出来,然后再打印出解,dp[i][j]表示从 i 到 j 所要添加最少的数。 注意有空行的数据。 代码如下:
阅读全文
HDU 5898 odd-even number (数位DP)
摘要:题意:给定一个区间,统计连续是奇数的个数是偶数,连续是偶数的个数是奇数的个数。 析:dp[i][j][k] 表示前 i 位,前一位是 j ,连续 k 次。 代码如下:
阅读全文
LightOJ 1140 How Many Zeroes? (数位DP)
摘要:题意:统计在给定区间内0的数量。 析:数位DP,dp[i][j] 表示前 i 位 有 j 个0,注意前导0. 代码如下:
阅读全文
HDU 3709 Balanced Number (数位DP)
摘要:题意:找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数。 析:数位DP,dp[i][[j][k]表示 前 i 位以 j 为支点,还差 k 平衡,枚举 j 就好。 代码如下:
阅读全文
HDU 3652 B-number (数位DP)
摘要:题意:给定一个数 n,求1-n之间有多少个包含13,并且是13的倍数的数。 析:数位DP,dp[i][j][k],表示前 i 位,模13余数为 j,k = 0,表示不含 13并且前一位不是1,k = 1,表示不含13但前一位是1,k = 2, 表示含13,那么剩下的就简单了。 代码如下:
阅读全文
HDU 5900 QSC and Master (区间DP)
摘要:题意:给出n对数keyi,vali表示当前这对数的键值和权值,可以操作将连续的两个数合并,如果满足gcd(a[i],a[i+1])>1,得到的价值是两个数的权值和, 每次合并两个数之后,这两个数就会消失,然后旁边的数会接上. 析:区间DP,首先dp[i][j] 表示区间第 i 段到第 j 段所能得到
阅读全文
UVaLive 6853 Concert Tour (DP)
摘要:题意:给定 n 个城市,m 个月,表示要在这 n 个城市连续 m 个月开演唱会,然后给定每个月在每个城市开演唱会能获得的利润,然后就是演唱会在不同城市之间调动所要的费用, 问你,怎么安排这 n 个演唱会是最优的。 析:很明显的一个DP题,并且也不难,用dp[i][j] 表示在第 i 个月,在第 j
阅读全文
UVa 242 Stamps and Envelope Size (无限背包,DP)
摘要:题意:信封上最多贴S张邮票。有N个邮票集合,每个集合有不同的面值。问哪个集合的最大连续邮资最 大,输出最大连续邮资和集合元素。 最大连续邮资是用S张以内邮票面值凑1,2,3...到n+1凑不出来了,最大连续邮资就是n。如果不止一个集合结果相 同,输出集合元素少的, 如果仍相同,输出最大面值小的。 析
阅读全文
UVa 10723 Cyborg Genes (LCS, DP)
摘要:题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种。 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么。那么有多少种呢? 同样也是分两种情况讨论,如果s1[i-1] == s2[j-1] 那么种类数肯定
阅读全文
UVa 1631 Locker (DP)
摘要:题意:有一个 n 位密码锁,每位都是0-9,可以循环旋转。同时可以让1-3个相邻数字进行旋转一个,给定初始状态和目状态,问你最少要转多少次。 析:很明显的一个DP题。dp[i][j][k] 表示前 i 位已经转好,并且第 i+1 位是 j ,第 i+2 位是 k,那么我们先把第 i 位转到指定位置,
阅读全文
CodeForces 711C Coloring Trees (DP)
摘要:题意:给定n棵树,其中有一些已经涂了颜色,然后让你把没有涂色的树涂色使得所有的树能够恰好分成k组,让你求最少的花费是多少。 析:这是一个DP题,dp[i][j][k]表示第 i 棵树涂第 j 种颜色恰好分成 k 组,然后状态转移方程是什么呢? 如果第 i 棵已经涂了,那么要么和第 i-1 棵一组,要
阅读全文
CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
摘要:问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:20
阅读全文
UVaLive 6801 Sequence (计数DP)
摘要:题意:给定一个序列,有 n 个数,只有01,然后你进行k次操作,把所有的1变成0,求有多种方法。 析:DP是很明显的,dp[i][j] 表示进行第 i 次操作,剩下 j 个1,然后操作就两种,把1变成0,把0变成1。也可以用记忆化来做。 代码如下: 记忆化搜索:
阅读全文
UVaLive 6697 Homework Evaluation (DP)
摘要:题意:给出一个长字符串,再给一个短字符串,进行匹配,如果第i个恰好匹配,则 +8,;如果不匹配,可以给长或短字符串添加-,先后匹配,这样-3, 连续的长字符串添加-,需要减去一个4;也可不给添加-,则-5。 析:dp[i][j][0] 表示第一个字符串第 i 个位置,和第二个字符串的第 j 个位置相
阅读全文
CodeForces 710E Generate a String (DP)
摘要:题意:给定 n,x,y,表示你要建立一个长度为 n的字符串,如果你加一个字符要花费 x时间,如果你复制前面的字符要花费y时间,问你最小时间。 析:这个题,很明显的DP,dp[i]表示长度为 i 的字符串的最少花费,当 i 是偶数时,要么再加一个字符,要么从i/2中复制,如果为奇数,要么再加1个字符,
阅读全文
UVa 1630 Folding (区间DP)
摘要:题意:折叠一个字符串,使得其成为一个尽量短的字符串 例如AAAAAA变成6(A) 而且这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYESYES 会变成 2(N5(E)R3(YES))。 析:用dp[i][j] 表示字符串中的第 i 个到第 j 个字符压缩后的最短长
阅读全文