动态规划
文章平均质量分 78
Yoangh
奋斗的小程序猿
展开
-
Hdoj 5410 CRB and His Birthday【背包变形】
题意 现在有 m 块钱以及 n 种物品,然后每种物品价格 val,买 x 个送糖果 x * w1 + w2,问怎么买是的送的糖果最多?分析 一看就是很明显的背包,问题在于这个w2,我们知道普通的背包放进去的物体得到的价值只和放进去的数量成正比。这里不是正比,假如放了为正比+w2,所以这里还与放与不放有关系。 千万不要陷入放于不放中,其实我们可以对w2这里做一次0-1背包,价值为w原创 2015-08-26 17:42:21 · 1105 阅读 · 0 评论 -
uva 10271 Chopsticks 【dp】
题目:uva 10271 Chopsticks题意:从一组数中选出每三个为一组,价值为三个中两个小的差值的平方和,让这个总价值最小。分析:定义dp【i】【j】为从后 i 个中选出 j 对的最小价值。转移方程:dp【i】【j】 = min(dp【i-1】【j】,dp【i+2】【j-1】+(a【i】-a【i+1】)*(a【i】-a【i+1】)原创 2014-09-28 18:21:34 · 1061 阅读 · 0 评论 -
hdoj 1074 Doing Homework 【状态压缩dp】
题目:hdoj 1074 Doing Homework 题意:给出一些任务15个,每个任务有截至时间和需要做的天数,超期一天扣一分,求让扣分最小的安排方案。分析:用状态压缩枚举所有的状态,dp【st】表示在st状态下的最小扣分转移方程:dp【st | (1注意这个题目需要打印路径,所以还要一个数组保存状态的转移,递归输出结果即可。AC代码:原创 2014-09-25 10:07:58 · 1715 阅读 · 0 评论 -
uva 10154 - Weights and Measures【dp】qi
题意:uva 10154 - Weights and Measures题意:有一些乌龟有一定的体重和力量,求摞起来的最大高度、力量必须承受其上面包括自己的全部的重量。分析:先按力量从小到大排序然后定义dp【i】 表示摞起来 i 只乌龟的最小质量。然后转移就是每次用遍历O(n)的负责度找最小的,然后记录,保存最大值即可。AC代码:#include#i原创 2014-09-17 18:54:37 · 1179 阅读 · 0 评论 -
nyoj 1070 诡异的电梯【Ⅰ】【dp】
题目:nyoj 1070 诡异的电梯【Ⅰ】这个题目源自湘潭大学oj 1206 Dormitory's Elevator是当时比赛的题目,题目都没有读清楚啊、分析:这其实就是一个简单的一维dp,用dp【i】表示从1层上到第 i 层花费的最小的体力。因为不能在相邻的楼层停留,所以可以从dp【i-2】转移,但这样不是最优的还要从dp【i-3】转移,因为这样的话就可以到达所原创 2014-09-17 15:29:24 · 2788 阅读 · 6 评论 -
uva 10069 Distinct Subsequences 【dp+大数】
题目:uva 10069 Distinct Subsequences题意:给出一个子串 x 和母串 s ,求子串在母串中的不同序列的个数?分析:定义dp【i】【j】:x 的前 i 个字母在 s 的前 j 个字母中的出现次数;dp [ i ] [ j ] = dp [ i ] [ j - 1 ] ; if ( x[ i ] == s [ j ] )原创 2014-09-17 17:12:35 · 1143 阅读 · 0 评论 -
Codeforces 106 C Buns【多重背包】
今天拉了一场CF,做了一下,略坑啊、、、首先105A题,竟然卡精度,小数点两位卡精度,需要给他加一个1e-6,算是见识了题目:Codeforces 106 C Buns题意:给出一些n克面,以及m种馅儿,每种馅儿做面包需要的面的克数和馅儿的克数以及馅儿的总克数,面也可以单独做面包,然后每一种面包都有价格,求做的面包的总价格最高?分析:很贱的题目啊,读了之后就开始原创 2014-09-25 19:40:52 · 1490 阅读 · 0 评论 -
UVA 10131 Is Bigger Smarter? 【严格单调递增子序列】
题目:UVA 10131Is Bigger Smarter题意:给出大象的身高和体重,求身高递增且体重递减的最长序列,都是严格的,并打印序列。分析:就是先对身高按自增排序,然后求一个单调递减子序列,严格单调的,所以加一句判断,然后打印序列,用一个数组保存就好了开始想的是先预处理掉重复的,提交wa了,这样不行,因为你不知道体重是最高的还是最低的,可能开始留高的好,后面原创 2014-09-16 21:24:50 · 1740 阅读 · 0 评论 -
hdoj 4336 Card Collector 【概率dp】
题目:hdoj 4336 Card Collector 题意:集齐卡片抽大奖,每个卡片概率,及其卡片个数,然后问你及其卡片要买卡片数量的期望。分析:最多20张卡片,用状态压缩来表示是否拿了某个卡片。比如现在有状态10010,表示拿了第2 3 5的状态下的期望。我们要求它,我们可以先得到11010,10110,10011,的期望,然后乘以各自位没拿的概率就是总的期望。原创 2014-09-26 11:44:16 · 1240 阅读 · 0 评论 -
hdoj 3001 Travelling 【3进制+旅行商】
题目:hdoj 3001 Travelling题意:标准的旅行商加一句话,每个点最多走两次。分析:状态转移方程一模一样,只是要三进制,因为每个点有三种状态 0 ,1 2定义状态:dp【st】【i】 :在状态为 st 时 当前在 i 点的最小花费转移方程:dp【now】【j】 = min(dp【now】【j】,dp【st】【i】+mp【i】【j】);now是st可以一原创 2014-09-26 10:21:56 · 1153 阅读 · 0 评论 -
poj 3311 Hie with the Pie 【旅行商+回原点】
题目:poj 3311 Hie with the Pie题意:就是批萨点小二要送批萨,然后给你每个点的距离,有向的,然后让你就走一次回到原点的最短路。分析:因为给出的是稠密图,所以要处理一下最短路,floyd然后TSP就好。枚举每个状态,对于当前状态的每一个已经走过的点,枚举是从那个点走过来的,更新最短路状态:dp【st】【i】 :st状态下走到点 i 的最短路原创 2014-09-26 17:56:25 · 1441 阅读 · 0 评论 -
区间dp模型(石子归并,括号匹配,整数划分)
区间dp顾名思义就是在一个区间上进行的一系列动态规划。对一些经典的区间dp总结在这里。1) 石子归并问题题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737描述: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为原创 2014-04-20 21:51:00 · 20632 阅读 · 3 评论 -
hdoj 4939 Stupid Tower Defense【dp】
题目:hdoj 4939 Stupid Tower Defense点击打开链接来源:2014 Multi-University Training Contest 7题意:塔防游戏,让你在一条直线上规划塔的放法,对经过的怪伤害最大,有三种类型的塔,第一种红塔,对经过的怪每一秒伤害x,第二种绿塔,对经过它之后的怪每秒伤害y,但是每增加一个绿塔伤害加 y,即第k个伤害 k*原创 2014-08-14 10:00:42 · 1011 阅读 · 0 评论 -
hdoj 4976 A simple greedy problem.【dp】
题目:hdoj 4976 A simple greedy problem.来源:2014 Multi-University Training Contest 10分类:dp or greedy 题意:有两个人A和B,还有一堆血量已知的怪,然后A每次可以给一个怪 1 的伤害,B每次给所有 1 的伤害,每次由A先来,轮流,问A最多能杀死多少怪。分析:原创 2014-08-23 10:38:07 · 1400 阅读 · 0 评论 -
uva 10003 Cutting Sticks 【区间dp】
题目:uva 10003 Cutting Sticks题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费?分析:典型的区间dp,其实和石子归并是一样的,花费就是石子的和,那么久不用多说了。AC代码:#include#include#include#include#include #include #in原创 2014-09-18 18:00:19 · 1257 阅读 · 0 评论 -
poj 2411 Mondriaan's Dream 【dp】
题目:poj 2411 Mondriaan's Dream题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案。分析:这是一个比较经典的题目,网上各种牛B写法一大堆。题解也是我们可以定义状态:dp【i】【st】:在第 i 行状态为 st 的时候的最大方案数、然后转移方程:dp【i】【st】 = sum (dp【i-1】【ss】)即所原创 2014-10-09 07:46:24 · 1696 阅读 · 0 评论 -
ZOJ Problem Set - 2297 Survival 【状压dp】
题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和可以增加的血,然后有一个boss,必须把小怪所有都打死之后才能打boss,血量小于0会死,也不能大于100.分析:定义状态:dp【st】,表示在 st 状态下的血量。然后转移:dp【st】 = max (dp【st】,dp【st&~(1注意初始化的时候必须原创 2014-10-09 09:44:51 · 1408 阅读 · 0 评论 -
poj 1952 BUY LOW, BUY LOWER[最长单调子序列变形]
题目:poj 1952 BUY LOW, BUY LOWER 题意:给出一个序列,先求最长单调递减子序列,然后求在子序列最长的情况下,不同的长度都为最长的的子序列的个数。(比如3,2,1和3,2,1属于相同,只能算一个)分析:首先用一个dp【i】表示到当前i点的最长子序列的长度 用dp2【i】表示最长为dp【i】的子序列的个数 然后dp【i】 = max(dp【j】)+1 (1<=j/****原创 2015-05-03 14:55:28 · 1292 阅读 · 0 评论 -
poj1947Rebuilding Roads(树形dp)
题目:poj1949Rebuilding Roads 题意:给出一棵树,问现在要得到一颗有p个节点的子树,需要最少减掉几条边?分析: 首先可以明确是一个树形dp题目,状态也很好定义: dp【root】【j】:以root为根节点的子树,得到 j 个节点的子树需要最少减掉的边数,注意子树中必须保留root节点。否则无法dp 那么很明显的边界条件dp【root】【1】 = num(儿子的个数),因原创 2015-04-30 20:02:41 · 2996 阅读 · 6 评论 -
nyoj 1189 yougth和他的朋友们 (DP)
题目:nyoj 1189 yougth和他的朋友们这题目是14年北京赛区的原题,讲题的时候说有三种解法,我们是用dp做的当时,原题目链接:Happy Matt Friends题意就不在说了。因为要求的是满足条件的种数。我们定义状态dp【i】【j】:当我们把第 i 个数放进去之后得到 j 的种数是多少那么我们可以得到状态转移方程:dp【i】【j^ a [ i ] 】原创 2015-03-31 18:09:02 · 1103 阅读 · 0 评论 -
hdoj 5125 Little Zu Chongzhi's Triangles【状态压缩dp】
题目:hdoj 5125 Little Zu Chongzhi's Triangles题意:给出n个木棍的长度,然后问这些木棍所能组成三角形的最大面积。分析:这个题目用状态压缩解,因为木棍的最大个数为12我们枚举所有状态,用状态对应位的 0 和 1 表示这个木棍是否选择,然后如果某个状态选择的木棍是3的话,判断是否可以组成,可以的话dp【st】 = 三角形面积然后大原创 2014-12-05 20:38:37 · 1420 阅读 · 0 评论 -
acdream 1429 Rectangular Polygon【dp】
题目:acdream 1429 Rectangular Polygon题意:给出n个数,是边长,然后问你能不能组成多边形,其边必须是平行于x轴或者平行于y轴的。如果可以的话输出任意一种方案。分析:分析发现,就是给你一堆数,然后让你尽可能挑出多的数,分成两部分的和相等,我们可以用dp来解决这个问题。定义dp【i】【j】 前 i 个数中挑出一些书其两部分的差值是 j原创 2014-12-01 19:43:53 · 1305 阅读 · 0 评论 -
nyoj 1111 游戏人生 【区间dp】
题目:nyoj 1111 游戏人生 题意:在一条直线上有n只狼,每只狼有自己的攻击力和辅助攻击,辅助攻击对旁边的两只狼有,问怎样的一个杀怪顺序才能使得花费最小。分析:这是北京现场赛的题目,当时一眼看出来是区间dp,但是没有考虑计算一个区间之后两边的辅助攻击,也是很有没有做dp题目了。定义:dp【i】【j】为打从区间 i -- j 的怪的伤害,然后转移方程dp【i】【j】原创 2014-12-01 09:32:08 · 1445 阅读 · 0 评论 -
uva 1220 - Party at Hali-Bula 【入门树形dp】
题目:uva 1220 - Party at Hali-Bula题意:一个公司员工要举行聚会,要求任意一个人不能和他的直接上司同时到场,一个员工只有一个支系上司,现在求最多有多少人到场,并且方案是否唯一分析:分析发现是要求一个树的最大独立集。这里可以用树形dp解决。定义dp【x】【0】:表示在 i 点不选 i 点的以 x 为子树的最大独立集 而dp【x】【1】 表示x到原创 2014-10-20 19:40:32 · 3404 阅读 · 0 评论 -
hdoj 5087 Revenge of LIS II 【第二长单调递增子序列】
题目:hdoj 5087 Revenge of LIS II 题意:很简单,给你一个序列,让你求第二长单调递增子序列。分析:其实很简单,不知道比赛的时候为什么那么多了判掉了。我们用O(n^2)的时间求单调递增子序列的时候,里面在加一层循环维护sum数组,表示前面有几个可以转移当当前,求前面sum的和保存到当前。最后求最后一个sum【n-1】是否为1就ok,为1的话在原创 2014-11-03 09:11:00 · 1306 阅读 · 0 评论 -
BestCoder Round #14 B 题 Harry And Dig Machine 【TSP】
题目:Harry And Dig Machine 题意:给一个m*n的矩阵,然后其中最多由10ge原创 2014-10-18 21:33:47 · 1164 阅读 · 0 评论 -
poj 2484 Cow Exhibition 【变形0-1背包】
题目:poj 2484 Cow Exhibition题意:给出n头牛,每头牛有一个幸运值 si 和聪明值 ti ,现在要选出一些牛,让两个值的和最大,前提是sum(si)和sum(ti)都是非负值。分析:此题数据量不大,可以暴搜+剪枝水过。这里要说的是0-1背包的思想,这个题目明显的变形就是物品有两个属性值,而且都要选最大的。那么我们可不可以把一个值固定下来来求另一原创 2014-10-30 11:17:50 · 986 阅读 · 0 评论 -
acdream 1222 Quantization Problem [dp]
题目:acdream 1222 Quantization Problem题意:给出一个序列 a ,然后给出一个 n * m 的矩阵,让你从这个矩阵中选出一个序列k,使得sum(abs(ki - ai))尽可能的小,首先第一个数只能在矩阵的第一行选第 x 个,然后以后每个在第 x%n 行选,依次选出最小即可。每个点可以选多次、分析:这个题目难度在于题意,题意读懂了就简单了。原创 2014-10-03 17:41:31 · 1060 阅读 · 0 评论 -
uestc 250 windy数 【数位dp】
题目:uestc 250 windy数题意:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。分析:首先定义dp【i】【j】:有 i 位最高位为 j 的出现次数。首先通过暴力预处理出dp值来。很明显其满足区间减法,通过求0---x的值通过区间减法求x---y 的。那么假如我们要求0---257的,原创 2014-10-28 19:02:54 · 2621 阅读 · 0 评论 -
二路单调自增子序列模型【acdream 1216】
题目:acdream 1216 Beautiful People题意:每个人有两个值,能力值和潜力值,然后要求一个人的这两个值都严格大于第二个人的时候,这两个人才能呆在一块儿,给出许多人的值,求最多有多少个人?分析:很容易想到是个单调非增模型,如果用O(n*n)的写法的话,会超时!那么我们就要用二分优化来找。我们可以先按第一个值 x 从小到大排序,然后按第二个值原创 2014-10-02 09:00:18 · 1362 阅读 · 0 评论 -
ural 1057 Amount of degrees 【数位dp】
题意:求(x--y)区间转化为 c 进制 1 的个数为 k 的数的出现次数。分析:发现其满足区间减法,所以可以求直接求0---x 的转化为 c 进制中 1 的个数为k的数的出现次数。首先用一个数组f【i】【j】:表示前 i 位中有 j 位为 1 的个数。可以通过方程 f【i】【j】 = f【i-1】【j】 + f【i-1】【j-1】来预处理出来。对于要求的答案,我们可以借助原创 2014-10-27 21:41:35 · 2867 阅读 · 1 评论 -
ZOJ Problem Set - 2563 Long Dominoes 【状压dp】
题目:ZOJ Problem Set - 2563 Long Dominoes题意:给出1*3的小矩形,求覆盖m*n的矩阵的最多的不同的方法数?分析:有一道题目是1 * 2的,比较火,链接:这里这个差不多,就是当前行的状态对上一行有影响,对上上一行也有影响。所以定义状态:dp【i】【now】【up】表示在第 i 行状态为now ,上一行状态为 up 时的方案数。原创 2014-10-09 17:11:53 · 1342 阅读 · 0 评论 -
uva 116 Unidirectional TSP【数塔+打印路径】
题目: uva 116 Unidirectional TSP题意:给出一个矩阵,当前的格子值为后面三个方向的格子最小值和当前的和,就第一列的最小值并打印路径(相同则去字典序最小的)、分析:刚开始想错了,从前往后走,这样的话没有办法控制字典序最小,用dfs标记了一下超时了。其实从后往前走就好了。以后一定先想清楚顺序,然后dp的时候选择字典序最小的,用father数据记录即原创 2014-09-18 09:14:04 · 1631 阅读 · 0 评论 -
poj1161Post Office【经典dp】
题目:poj1161Post Office点击打开链接题意:给出一条直线上的n个坐标表示村庄的位置,然后要在上面建p个邮局,村民优先选择去近的邮局,问所有村庄去邮局的最小距离和是多少?分类:区间dp分析:对于任意一个村庄,只有两种选择,要么在这儿建邮局,要么不建,我们可以预处理出来任意两件建立一个邮局的的最小距离w【i】【j】,而对于任意两点,建立一个邮局的最优原创 2014-08-04 11:08:51 · 1467 阅读 · 0 评论 -
dp之最大和,m段最大和以及最大子矩阵
前一段时间因为要讲课学习了dp系列算法,学习了很多东西,给大一菜鸟讲了这个系列的算法,当时没有记录,前几天拿起来发现有点忘记了,所以在这里记录一下,最大和系列算法。首先子串和 http://acm.nyist.net/JudgeOnline/problem.php?pid=44非常简单,就是一个状态转移方程,切记求出的最后一个不是最大的,而是里面最大的一个数才是最大值。dp[i]=Max(原创 2014-01-10 10:51:25 · 1981 阅读 · 0 评论 -
poj 1018 Communication System
题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths 和 价格prices。现在每种设备都各需要1个,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。其中B为这n件设备的带宽的最小值,P为这n件设备的总价。原创 2014-04-15 09:16:08 · 9629 阅读 · 7 评论 -
bnuoj 29065 鸣人的查克拉
鸣人的查克拉Time Limit: 1000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: MainPrev Submit Status Statistics Discuss NextFont Size: + -Type:原创 2014-03-30 09:27:30 · 2700 阅读 · 1 评论 -
状态压缩经典题目(poj1184 nyoj81)
题目描述:描述司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的原创 2014-04-29 15:03:56 · 2668 阅读 · 0 评论 -
nyoj 980 格子刷油漆
格子刷油漆时间限制:1000 ms | 内存限制:65535 KB难度:3描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b原创 2014-03-14 17:51:40 · 7563 阅读 · 5 评论 -
关于dp数塔类问题及其变形
首先,经典是数塔问题大家都知道吧,从下往上dp每一步只能从下面的左边或者右边走过来选择一个最小的,最后dp到顶端也是就是最大的或者最小的一个值,当然从上往下dp也是可以的。对于当前的每一个点,也是只能从上边的左边或者右边选择一个最大的。最后在最后一行数中求一个最大值既为结果。The Triangle时间限制:1000 ms | 内存限制:65535 KB难度:4原创 2014-01-12 11:55:16 · 2649 阅读 · 0 评论