
[D]DP
文章平均质量分 76
GooZy
程序宅一枚。没事写写代码,打打游戏,看看动漫~
展开
-
[Codeforces546D]Soldier and Number Game[dp][实现][素数筛][分解整数][数学]
原题链接:[Codeforces546D]Soldier and Number Game[dp][实现][素数筛][分解整数][数学]题意分析:本题从实质上来说,就是给你两个整数a, b。求出a, a - 1, a - 2........b + 1这些整数能被拆分成多少个素数相乘,把每个的拆分结果相加起来。例如 a = 10, b = 2. 那么ans = 1(3) + 2(4) + 1(原创 2015-05-23 10:11:55 · 1195 阅读 · 5 评论 -
[CodeForces 607A]Chain Reaction[DP]
题目链接:[CodeForces 607A]Chain Reaction[DP]题意分析:n个灯塔,有自己的照射范围,如果i号灯塔正常工作,那么它的左边b范围内的灯塔都会无法工作。问:任意放置一座b值任意的灯塔,最少被破坏的灯塔数是多少?解题思路:换一个思路:求最少被破坏,就是n个灯塔 - 求最大没被破坏。设:dp[x]为到位置x为止,x位置的灯塔被激活,最大没被破坏的灯塔原创 2016-03-07 00:56:30 · 546 阅读 · 0 评论 -
[POJ 3046]Ant Counting[dp][优化]
题目链接:[POJ 3046]Ant Counting[dp][优化] 题意分析: 蚂蚁有T个家族,每个家族里的蚂蚁没有区别,总共有A只蚂蚁,现在问:给出每个家族的蚂蚁数量,最多能组合成多少个不同的集合个数为S~B的集合? 就是给你T个集合,每个集合num[i]num[i]个数,这些数排列组合能有多少个,个数为S~B的集合。 解题思路: 本题不能有重复情况,即{1,2}{2,1}是相同的,原创 2016-01-14 17:46:01 · 658 阅读 · 0 评论 -
[POJ 3280]Cheapest Palindrome[DP]
题目链接:[POJ 3280]Cheapest Palindrome[DP]题意分析:有一个长度为m的字符串,全都为小写字母,给出串中每个字母删除和插入的代价,问:要构成回文串,最少需要多少代价?解题思路:设dp[i][j]为字符串s[i ~ j]变成回文串需要的最小代价。那么有转移方程:dp[i][j] = dp[i + 1][j - 1] (s[i] == s[j]);原创 2016-01-14 12:24:23 · 337 阅读 · 0 评论 -
[CodeForces159D]Palindrome pairs[dp]
题目链接: [CodeForces159D]Palindrome pairs[dp]题意分析:给出一个字符串,求其中满足s[a..b]s[x..y] && a解题思路:这题采取DP的思想来做,设置两个数组:dpr[i]和dpl[i]。 dpl[i]代表:以i为开头的回文串个数;dpr[i]代表:以i为结尾的回文串个数; 由于a,b只需满足a,b具体代码如下:#inclu原创 2015-03-15 10:39:17 · 922 阅读 · 0 评论 -
[POJ 3616]Milking Time[DP]
题目链接:[POJ 3616]Milking Time[DP]题意分析:给出M个区间,每个区间有对应的产奶量efficiency[i],奶牛每次挤完奶要休息R分钟,问:最大的挤奶量是多少?(农夫在起始分钟的开始处开始挤奶,在结束分钟的开始处结束挤奶)解题思路:设dp[i]为选择第i个区间可以得到的最大产奶量。dp[i] = max(dp[0 ~ i]) + efficiency[i原创 2016-01-14 11:27:31 · 415 阅读 · 0 评论 -
[POJ 2385]Apple Catching[DP]
题目链接:[POJ 2385]Apple Catching[DP]题意分析:每分钟树1和树2两棵树之中都会有一棵树掉落苹果,现在给出分钟数N和W次转换树次数,其中,1代表当前分钟苹果在树1掉落,2代表苹果在树2掉落,转换树不耗费时间,问:最多能接多少个苹果?解题思路:我们设状态,dp[i][j]代表到第i分钟,转换j次,最多可以拿到多少苹果。那么就有dp[i][j] = max(d原创 2016-01-13 17:45:02 · 901 阅读 · 1 评论 -
[POJ 3181]Dollar Dayz[DP][高精度]
题目链接:[POJ 3181]Dollar Dayz[DP]题意分析:给出无穷多个1~K的价值的货币,问:能有多少种方式组合成N。解题思路:完全背包。dp[i] = dp[i] + dp[i - j]。j为货币价值。第i个价值可以有第i - j的价值加上价值为j的货币组成。由于数量很大,需要高精度。这里我们可以使用ldp和hdp分别代表数字的低位和高位,整个数字长度就可以表示到原创 2016-01-13 12:51:11 · 495 阅读 · 0 评论 -
[HDU 2563]统计问题[递推]
题目链接:[HDU 2563]统计问题[递推]题意分析:走过的地面马上就会坍陷无法再走,初始时,有一个方向无法行走,这里设为下方。问,走n步,一共有多少种走法?解题思路:无法往回走,如果上一步是向上,那么这步就可以走上,左,右;如果上一步是向左或者向右,那么这一步就可以向上或者向着上一步相反的方向。总共就这两种情况。我们设向上走为z[i],左右走为h[i],总共走法为f[i]。原创 2016-01-13 12:40:00 · 425 阅读 · 0 评论 -
[POJ 3411]Paid Roads[BFS][状压]
题目链接:[POJ 3411]Paid Roads[BFS][状压]题意分析:求从点1到达点N的最少花费。点和边可重复经过。V1->V2的费用分为两种:1.如果通过了某点C,那么可以考虑花费P通过;2.否则只能考虑花费R通过。解题思路:考虑常规搜索,单单考虑标记节点的话,有些重复的点就不经过了。再考虑标记边,边就不能重复了,两者都不行。根本上说是缺失了可以比较的状态,导致无法肯定什原创 2016-03-31 09:28:58 · 714 阅读 · 0 评论 -
[LightOJ 1031]Easy Game[DP]
题目链接:[LightOJ 1031]Easy Game[DP]题意分析:A和B玩游戏,A先手。规则为:每轮,每人至少从左边开始或者从右边开始取1个数字以上,取的数字之和即为这个人得到的分数。现在问:在两人都采取最优策略的情况下,A和B的差值最大为多少?解题思路:定义:dp[i][j]为,拿完区间为[i,j]时,A能取到的最大分值,那么最终答案就是dp[1][n] - (sum -原创 2016-03-07 23:15:29 · 406 阅读 · 0 评论 -
[CodeForces 543A]Writing Code[DP]
题目链接:[CodeForces 543A]Writing Code[DP]题意分析:n个程序员合作写m行代码,第i个程序员每次写一行会产生a[i]个bug,程序员顺序工作,1工作之后2工作,如此类推,现在要求总bug数不得超过b。问:写完m行代码,总bug数不超过b的方案有多少种?解题思路:首先我们试着定义一个状态,由于程序员顺序工作,那么我们定义dp[i][j]为写了i行代码,原创 2016-03-08 14:20:42 · 617 阅读 · 0 评论 -
[POJ 1159]Palindrome[DP]
题目链接:[POJ 1159]Palindrome[DP]题意分析:给字符串添加最少的字符让其成为回文串。解题思路:dp[i][j]代表,区间[i,j]变成回文要插入的最少字符数。如果s[i] == s[j],那么dp[i][j] = dp[i + 1][j - 1];否则,dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1(由已经构成回文原创 2016-03-13 23:52:07 · 492 阅读 · 0 评论 -
[POJ 2533]Longest Ordered Subsequence[LIS]
题目链接:[POJ 2533]Longest Ordered Subsequence[LIS]题意分析:求单调递增的最长上升子序列。解题思路:n^2:dp[i]代表,以i结尾的最长上升子序列,那么dp[i] = max(dp[i], dp[j] + 1) (j: 0 ~ i)nlogn:dp[i],dp[i]代表长度为i的子序列对应的最末位元素。个人感受:n^2差点被坑原创 2016-03-13 16:56:20 · 416 阅读 · 0 评论 -
[ZOJ 3469]Food Delivery[记忆化搜索]
题目链接:[ZOJ 3469]Food Delivery[记忆化搜索]题意分析:送餐员需要从X处餐厅出发,去给顾客送食物,送餐员经过客户门口即可选择是否提交食物(所有食物已经都存放在外卖小哥手上了)。每个顾客随着等待时间的上升都会产生戾气,戾气值为bi每分钟,现在外卖员以V的-1次方米每分钟的速度送餐(也就是每米V分钟),问:最少造成的戾气值为多少?解题思路:设状态dp[i][j]原创 2016-02-28 01:24:44 · 655 阅读 · 0 评论 -
[HDU 1300]Pearls[DP]
题目链接:[HDU 1300]Pearls[DP]题意分析:总共有C种等级的珍珠,每种需要买a[i]个,单个价格为p[i]元,如果想要买某种等级的珍珠,需要先交付10个该等级珍珠的价格才能进行购买,允许使用高等级珍珠替换需要买的低等级珍珠。问:要达到采购需求,最少需要花费多少的经费?(等级越高,单价越高:)解题思路:设dp[i]代表到第i种等级的珍珠,需要花费的最少费用。那么初始化原创 2016-02-27 22:18:19 · 615 阅读 · 0 评论 -
[POJ 1836]Alignment[DP][LIS]
题目链接:[POJ 1836]Alignment[DP][LIS]题意分析:为了使得士兵的队列满足:任意一个士兵都能看到他前方的无穷远处或者后方的无穷远处(大概是个三角形的样子)。最少需要移出去多少名士兵?解题思路:求出原序列的最长上升和最长下降子序列,然后枚举左右士兵即可。个人感受:怎么枚举士兵这点没处理好,之前思维卡在三角形只有一个最高点,其实本题并非完全让队列变成三角原创 2016-02-27 04:08:36 · 429 阅读 · 0 评论 -
[CodeForces 118D]Caesar's Legions[DP]
题目链接:[CodeForces 118D]Caesar's Legions[DP]题意分析:凯撒有n1个步兵和n2个骑兵,现在将他们排成一列,问总共有多少种不同的排列情况?(步兵不能连着超过k1个,骑兵不能连着超过k2个)解题思路:首先倒着考虑状态看看行不行,比如已经放置了n1个步兵和n2个骑兵的方法总数,那么这个状态的上一个状态应该考虑到当前状态中,最后一个兵种是什么,然后考虑原创 2016-03-12 10:47:45 · 844 阅读 · 0 评论 -
[CodeForces 332B]Maximum Absurdity[DP]
题目链接:[CodeForces 332B]Maximum Absurdity[DP]题意分析:寻找两个不重叠的长度为k的子串,使得它们之和最大。解题思路:第一想法是,处理出从这个点开始,长度为k的区间的总和,即getv[i]代表区间[i, i + k - 1]的和,然后想着这个能怎么用?然后发现可以处理出来之后,从getv[1]开始枚举,dp[i]代表从i开始,和最大的区间和原创 2016-03-09 23:48:54 · 445 阅读 · 0 评论 -
[ZOJ 3640]Help Me Escape[期望DP]
题目链接:[ZOJ 3640]Help Me Escape[期望DP]题意分析:Cain初始战斗力为f,他的面前有n条道路,走向每条道路的概率都相同,如果Cain的战斗力大于该道路所需战斗力,那么他需要花费t[i]天逃跑,否则战斗力增加c[i],重新选择道路,天数加1。问:他逃出去的期望天数是多少?解题思路:dp[f]代表战斗力为f时的期望逃出去天数,那么有转移dp[f] += 1原创 2016-03-09 09:10:40 · 517 阅读 · 0 评论 -
[CodeForces 615B]Longtail Hedgehog[DP]
题目链接:[CodeForces 615B]Longtail Hedgehog[DP]题意分析:Santa要画一只刺猬,现在有n个点,m条边。刺猬的定义是有尾巴和刺。尾巴:从尾巴的起始端到末尾,所有的标号都严格递增,eg.1->2->4这样子。然后画刺,刺的画法是在画完尾巴之后,将所有的边都染色,此时选定一个结点为尾巴末尾,这个末尾上的所有边,都是刺。刺猬的优美度 = 尾巴长度(尾巴上点的原创 2016-01-09 11:26:11 · 807 阅读 · 0 评论 -
[CodeForces 467C]George and Job[DP]
题目链接:[CodeForces 467C]George and Job[DP]题意分析:求一个含有n个数的序列,从其中选定k个长度为m的不想交的区间,最大和为多少?(k * m 解题思路:设状态为dp[i][j]:前i个数,取j个区间能达到的最大值。那么就有转移方程:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + sum[i]原创 2015-12-31 11:28:04 · 629 阅读 · 0 评论 -
[UVA 1629]Cake slicing[记忆化搜索]
题目链接:[UVA 1629]Cake slicing题意分析:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有一个樱桃~问最少切割距离是?解题思路:既然是切割蛋糕,可以感受到是一个无限切割的过程(递归?)反正有这种感觉存在。然后数据是20*20。那么就试试记忆化搜索。我们设dp[u][d][l][r]为u(up)为上届d(down)为下届,原创 2015-08-12 02:05:24 · 2104 阅读 · 0 评论 -
[HDU 5410]CRB and His Birthday[01、完全背包]
题目链接:[HDU 5410]CRB and His Birthday[01、完全背包]题意分析:有m的钱,n种商品,每种价格w[i],购买了i种商品x个的话,商店会赠送糖果:a[i] * x + b[i]个(x>0)。那么,最多能得到多少糖果呢?解题思路:首先考虑b[i]的存在,b[i]只会出现在购买了一次商品时用上,用01背包处理,然后01背包处理完后,可以接着跑一遍多重背包,原创 2015-08-24 00:43:47 · 944 阅读 · 0 评论 -
[UVA 1632]Alibaba[区间DP]
题目链接:[UVA 1632]Alibaba[区间DP]题意分析:有n个宝藏,每个都在一个位置p[i],在规定的时间t[i]就会消失。阿里巴巴要在宝藏消失前收集齐所有宝藏,问:有方法吗?有的话最少多少秒?解题思路:嘛,取宝藏肯定是一个连续的区间都取掉,故意不拿绝对不是最优策略。所以整个策略就包括两种:向左走还是向右走。设状态为dp[l][r][2]。0代表阿里巴巴在左端点,1代表阿原创 2015-08-24 02:14:55 · 1461 阅读 · 4 评论 -
[CodeForces327A]Flipping Game[dp][暴力]
原题链接:[CodeForces327A]Flipping Game[dp][暴力]题意分析:翻转一个区间,使得1的个数最多。(必须翻转一次!)解题思路:可暴力,可dp。暴力的话,遍历每个区间段,小区间内的1个数 = 小区间长度 - 小区间内1的个数。小区间外1个数 = 大区间1个数 - 小区间内1个数。然后每次更新。dp的话,就是求出最大区间0的个数(这个区间中1的影响为-1,0的影原创 2015-05-24 11:29:50 · 1617 阅读 · 0 评论 -
[CodeForces189A]Cut Ribbon[dp][完全背包]
题目链接:[CodeForces189A]Cut Ribbon[dp][完全背包]题意分析:给出一条丝带长度n,要求把丝带切成给定长度a、b、c中的一种或多种,问:最多能切成几条?(保证至少有一个解)解题思路:题目实质上就是问:刚好装满完全背包,可以装的最大价值为多少?个人感受:第一眼看题的时候,直接写成了一个爬楼梯的dp方程,发现样例都过不了后,就想着贪心,然后各种。。。。。今儿再看原创 2015-06-06 09:41:26 · 927 阅读 · 0 评论 -
[HDU1506]Largest Rectangle in a Histogram[dp]
题目链接:[HDU1506]Largest Rectangle in a Histogram[dp]题意分析:给出多个矩形条,高度随机(0 解题思路:对于每一块木板,我们可以将他向左右扩散,扩散规则为:左右大于我,我就往那边走。l[i], r[i]分别用于记录第i个板能扩散到的最左边和最右边,于是有:面积 = h[i] * (r[i] - l[i] + 1); O(n)遍历面积求出最大原创 2015-05-21 21:51:08 · 388 阅读 · 0 评论 -
一个挺特别的动态规划入门教程
通过金矿模型介绍动态规划原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html点击下载01背包测试数据.rar 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来转载 2015-04-26 15:29:34 · 645 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programming:转载 2015-04-25 11:30:14 · 673 阅读 · 0 评论 -
[UVA 10003]Cutting Sticks[DP]
题目链接:[UVA 10003]Cutting Sticks[DP]题意分析:给出一根木棍,然后需要对其进行切割,每一次切割费用是被切割木棍的长度。比如长度为10米,在4米处切割,因为被切割的木棍长度为10米,所以费用为10。问:升序给出所有要切割的点,最少的切割费用是多少?解题思路:状态:dp[i][j]表示切割区间[i,j]所需要的最少费用;转移:dp[i][j] = min(dp[i原创 2015-08-12 18:59:54 · 591 阅读 · 0 评论 -
[UVA 12589]Learning Vector[DP]
题目链接:[UVA 12589]Learning Vector[DP]题意分析:给出n个矢量,从中选择k个,以坐标原点为起点,收尾相连,问:这样的k个周围相连矢量与x轴围成图形的最大面积的两倍是多少?解题思路:考虑状态:dp[id][pick][h]代表到第id个矢量为止,选择pick个矢量离最大面积还差多少,h为当前图形最右端高度。具体转移看代码。这里着重说一下为什么要对这些矢量按斜原创 2015-08-12 22:16:58 · 1033 阅读 · 0 评论 -
[HDU]1864最大报销额[dp][贪心?怎么可能!]
题目链接:[HDU]1864最大报销额[dp]or[贪心]题意分析:题意就不再分析了。需要注意的事,题目中有一句『单项物品的价值不得超过600元』等价于『单类物品总价值不超过600元』。刚开始还以为是单个物品Orz。解题思路:这次最大报销额是一个浮点数,单纯的整数背包就不起作用了。可以考虑使用乘100后变为整数的方法,进行01背包求解。(网上流传的两种方法:一种DP:转移方原创 2015-05-19 15:23:39 · 599 阅读 · 0 评论 -
[POJ 2184]Cow Exhibition[DP][01背包]
题目链接:[POJ 2184]Cow Exhibition[DP][01背包]题意分析:有n头牛,每头牛的智商为si,情商为fi,现在要举办一个展览,需要选择一些牛出来,满足这些牛的情商只和不小于0,智商之和不小于0,并且需要这两个之和的和最大化,问最大是多少?不存在则输出0。解题思路:将牛的智商作为背包容量,情商作为价值,那么最终答案就是:dp[i] + i。本题智商可为负,为了原创 2016-01-15 19:42:55 · 486 阅读 · 0 评论 -
[POJ 3666]Making the Grade[DP]
题目链接:[POJ 3666]Making the Grade[DP] 题意分析: 含有n个数的序列,允许对序列中的任意一个数加或者减,问:最少更改多少值,使得原序列变成单调递增或者单调递减? 解题思路: 设状态dp[i][j]为到第i个数,以b[j]为结尾更改的最少价值。那么有转移方程dp[i][j]=min(dp[i−1][k])+|a[i]−b[j]|(k=0∼j)dp[i][j] =原创 2016-01-15 19:26:45 · 447 阅读 · 0 评论 -
[HDU 5445]Food Problem[多重背包]
题目链接:[HDU 5445]Food Problem[多重背包]题意分析:有n种类型的点心,每种提供t的能量,占据u的空间,有v个;有m种类型的卡车,每种容量x,雇佣花费y,能提供z辆;点心可以被拆分到不同的车运送,但是必须保证点心的完整,雇佣花费不得超过5e4,问:提供至少p能量的点心,最少需要花多少钱?否则输出『TAT』。解题思路:可以先用多重背包求出满足p能量的原创 2015-10-12 20:13:35 · 901 阅读 · 0 评论 -
[LightOJ 1018]Brush (IV)[状压DP]
题目链接:http://lightoj.com/volume_showproblem.php?problem=1018题意分析:平面上有不超过N个点,现在可以任意方向划直线将它们划去,问:最少要划几次可以把所有的点划去?解题思路:我们可以使用集合S表示:有哪些点还没有被划掉,然后转移 dp[s] = min(dp[s &(~line[i][j])]) + 1;这里涉及到line[i][j]原创 2015-08-11 03:55:21 · 1707 阅读 · 0 评论 -
[UVA 10817]Headmaster's Headache[状压DP]
题目链接:[UVA 10817]Headmaster's Headache[状压DP]题意分析:校长需要s门课,每门至少有两名老师来教,所以他现在想要招老师啦。当然,校长手头本来就有m个老师,每个老师都教着一个或多个课程,这些老师是不能解雇的,必须用。然后现在又n个老师来应聘,每个都有价格和他们能教的课程,校长希望花最少的钱达到他的目标,问:最少多少钱呢?解题思路:嘛!s = m时原创 2015-08-22 23:25:40 · 1495 阅读 · 0 评论 -
[HDU 5489]Removed Interval[LIS]
题目链接:[HDU 5489]Removed Interval[LIS]题意分析:求含有N个元素的数组,去掉L个连续的元素后,剩下元素构成的最长上升子序列的长度。解题思路:我们就可以枚举这个长度为L的区间,从左往右滑动窗口。每向右移动一格,此时有:最长上升子序列长度 = 窗口右边以右边第一个元素开头的最长上升子序列 + 窗口左边最大元素小于窗口右边第一个元素的最长上升子序列。原创 2015-09-28 22:39:28 · 2501 阅读 · 6 评论 -
[ACdream]哗啦啦村的日常游戏(一)抓个球[概率DP][记忆化搜索]
F - 哗啦啦村的日常游戏(一)抓个球Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)Submit StatusProblem Description唐老师和狗哥在玩哗啦啦村的日常游戏——抓个球。在袋子里有w个白球,b个黑球。唐老师和狗哥轮流原创 2015-08-05 23:34:47 · 1244 阅读 · 0 评论