![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
more_ugly_less_bug
这个作者很懒,什么都没留下…
展开
-
poj-3280
Cheapest Palindrome 题意:第一行输入两个参数N和M,N表示一共有N种字符,M表示字符串的长度。第二行输入一个长度为M的字符串,由小写字母组成。接下来N行,每行第一个字符为一个小写字母,第二个是整数,表示添加一个这个字母所花费的代价,第三个也是一个整数,表示删除一个这个字母时所花费的代价。问题是将输入的字符串用插入和删除操作,最少花费的代价是多少。 用dp[i原创 2017-07-08 16:17:25 · 600 阅读 · 0 评论 -
CCF CSP 有趣的数 动态规划
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。 请计算恰好有n位的有趣的数的个数。由于答案原创 2017-03-29 21:19:44 · 7291 阅读 · 2 评论 -
poj-3254 状态压缩
Corn Fields 题意:第一行输入两个参数M和N,表示M行N列。接下来解输入M * N大小的01矩阵,0表示土地贫瘠,1表示土地肥沃,只有肥沃的土地可以可以有牛。并且一只牛的上下左右不能有牛。问有多少种放牛的方法,结果模除 100,000,000。 第i行放牛的方法影响第i+1行放牛方法的数量,所以可以先算第i-1行的状态再转移到第i行。问题是要如何表示每一行状态呢。一原创 2017-07-08 14:29:55 · 316 阅读 · 0 评论 -
poj-2948
Martian Mining 题意:在一个n*m的矩阵里,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。在格子北边有bloggium的收集站,西边有 yeyenum 的收集站。现在要在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿(yeyenum+bloggium)? 因为每个格子只能向西或者向北,某个原创 2017-07-09 10:53:42 · 7157 阅读 · 0 评论 -
poj-2533 最长递增子序列
Longest Ordered Subsequence 题意:题意其实没什么好解释的,就是最长递增子序列的长度嘛,{1 7 3 5 9 4 8}这个序列中最长递增子序列有{1 3 5 9}和{1 3 5 8}两个,长度都是4。 一共n个数,用dp[i]表示输入的序列中前1·i个数字组成的子序列中取得的最大值。dp[i]是由dp[1~i-1]中的一个转移而来的,找出1原创 2017-07-08 13:51:30 · 205 阅读 · 0 评论 -
poj-2151
Check the difficulty of problems 题意:第一行输入M,T,N三个参数。M表示一共有M个问题,T表示一共有T个参赛队伍,N表示冠军至少要做对几道题。接下来T行,表示第1队到第T队做对每一道题目的概率。要求至少每队做出一道题并且至少有一队做出N道题的概率。 用dp[i][j][k]表示第i队,前j道题做对k题的概率,那么dp[i][j+1][k]这个原创 2017-07-08 13:36:27 · 295 阅读 · 0 评论 -
poj-1976 01背包
A Mini Locomotive 题意:输入第一个数为测试数据的数量。输入第二个数n表示有N节车厢。输入第三个有n个数,表示第1个车厢到第n个车厢各个车厢的乘客数量。输入第三个数m表示一个火车头可以拉几个车厢,每个火车头拉走的车厢都是连续的。一共有三个火车头,求三个火车头最多可以拉走多少乘客。 这题像一个背包问题,求要取哪些使得价值最大。但是又略有改变,要求取走的是连续的原创 2017-07-08 12:02:17 · 541 阅读 · 0 评论 -
poj-1953
World Cup Noise 题意:输入一个数n表示n位二进制数,求n位二进制数0和1的各种组合中,没有连续两个1的情况数量。 我们可以用dp0[i]表示i位二进制数中第i位为0且没有连续两位1的数量,用dp1[i]表示i位二进制数中第i位为1且没有连续两位1的数量。那么第i+1位如果添加0则可以由第i位为0和1两种情况转换而来,也就是dp0[i+1] = dp0[i]+原创 2017-07-06 16:25:28 · 294 阅读 · 0 评论 -
poj-1837
Balance 题意:第一行输入两个数C和G。C表示天平上有几个挂钩,G表示有几个挂码。第二行输入C个挂钩的位置,负数表示在左侧,正数表示在右侧。第三行输入G个挂码的重量。问有几种方法可以使得天平平衡。 要使天平平衡需要左右两端的力矩相同,左右力矩最大值都为20*15*25=7500。把每一个力矩值都作为一个状态,则一侧一共有7500个状态,由于左侧的力矩为0~-7500,所原创 2017-07-06 14:58:43 · 598 阅读 · 0 评论 -
poj-1836 最长上升/下降子序列
Alignment 题意:输入一串数字代表着一列排好队的军人的身高,现在要求从其中移走一些人,使得剩余在队伍中的任何一个人都可以向左或者向右看到队伍的头。队伍中身高并列最高的几个人不会相互阻碍,但是其余的身高相同的人会相互阻碍视线,求最少要移出多少人才能满足要求。 首先理解一下题意,抛开背景,题目要求在一列数中移出最少的数,使得从左到右先是递增,到一个顶点后一直递原创 2017-07-06 14:04:36 · 338 阅读 · 0 评论 -
poj-1579
Function Run Fun 题意:题目很简单,输入三个数a,b,c,并给出了四条规则,要求根据这四条规则求出输入a,b,c 的解。 可以看出这四条规则是存在嵌套关系的,容易想到用递归求解,但是未免开销过大。注意到这也是由前一个转态到后一个状态的过程,所以可以用动态规划处理。且只需要计算0到20之间的状态。 我的AC代码如下: #include using namespac原创 2017-07-06 13:31:31 · 238 阅读 · 0 评论 -
poj-1458 最长公共子序列
Common Subsequence 题意:一行给出两个字符串S1和S2,找出他们的最长 公共子序列数量,一个金典的动态规划问题。 用dp[i][j]表示字符串S1取前i个,字符串S2取前j个时,他们的最长公共子序列数量有多少。当S2右端又加入了一个字符时,即表示为dp[i][j+1]时,如果s1[i]和s2[j+1]相同,则dp[i][j+1]=dp[i-1][j]+1。如果s1原创 2017-07-06 13:00:10 · 263 阅读 · 0 评论 -
POJ-1276 多重背包问题
Cash Machine 题意:输入第一行cash N n1 D1 n2 D2 ... nN DN ,D1表示一种面值的零钱,n1表示D1可以使用的数量。一共有N种零钱。需要找出用这些零钱可以组成的不超过cash的最大数额。 这是一道多重背包的问题,和poj-1014 多重背包问题类似,需要先转化成01背包,再用01背包问题的方法求解。转换的代码如下,a[i]是转换前第i个零原创 2017-07-06 12:39:11 · 229 阅读 · 0 评论 -
poj-1014 多重背包问题
Dividing 题意:有一堆大理石,每个石头的价值在1-6之间,每种价格的石头有多个。现在要求将这堆石头分成两份,使得两份的总价值相同,回答是否存在一种方法将可以实现划分。 这是一道多重背包问题,多重背包问题的做法可以是先将它转化为01背包,再用01背包问题的方法继续求解。转化的思路是,将一个价格下的几件物品,组合成多个价格下个一件物品。比如价格2下原来有7件物品(二进制11原创 2017-07-06 10:22:20 · 2187 阅读 · 0 评论 -
CCF CSP 压缩编码 动态规划
问题描述 给定一段文字,已知单词a1, a2, …, an出现的频率分别t1, t2, …, tn。可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词编码的前缀,这种编码称为前缀码。 使用前缀码编码一段文字是指将这段文字中的每个单词依次对应到其编码。一段文字经过前缀编码后的长度为: L=a1的编码长度×t1+a2原创 2017-03-03 17:04:26 · 10416 阅读 · 4 评论