Dynamic Programming
文章平均质量分 77
kdqzzxxcc
这个作者很懒,什么都没留下…
展开
-
POJ 3628 Bookshelf 2 水DP
为什么贴这题呢。主要是昨天的比赛全是DP。一道都不会,最近做了很多图论,但是碰上DP就全死了。这题也算我学DP的一个开始吧。现在对于DP的认识还是很浅层次的,昨天魏神最后4分钟A掉的DP震惊全场,也萌生了我学习DP的念头。但是这也不是说学就能学好的,还是得好好静下心来,DP的题最重要的就是推状态转移方程。加油吧。!#include #include #include #i原创 2012-08-13 19:58:36 · 751 阅读 · 0 评论 -
POJ 3264 RMQ模版
写RMQ练练手。这道题差一点刷进第一版,明天再优化一下。#include #include #include #include #include #include #include #include #include #include #include #include #define Max 2505#define FI first#define SE sec原创 2013-08-20 22:27:06 · 882 阅读 · 0 评论 -
HDU 4571 SPFA+DP
好题,长沙邀请赛的一道题。这种题还是蛮常见的,SPFA+DP优化,记得上次北大校赛就有一道。根据题意,我们可以虚拟两个超级源点和超级汇点,源点到所有点的距离都是这段距离加上参观的时间。所有点到汇点的距离就是该点到终点的距离。这样控制之后,对于终点就有2个选择了,路过或者参观。对于途中除起点终点以外的点,我们可以先进行一遍floyd,然后根据他们的val值进行连边,值是两点之间的距离原创 2013-08-20 10:03:44 · 839 阅读 · 0 评论 -
HDU 4568 SPFA + TSP
这道题是长沙邀请赛的题,当时是道签到题。这种题还是很常见的,讲一下思路。首先是预处理出每个宝藏之间的距离,还有到边的距离,直接对每个宝藏进行一次SPFA就可以了。然后就是经典的求TSP的过程。#include #include #include #include #include #include #include #include #include #inclu原创 2013-08-09 16:07:39 · 994 阅读 · 0 评论 -
UVAlive 6131 dp+斜率优化
这道题和06年论文《从一类单调性问题看算法的优化》第一道例题很相似。题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,总距离*重量最小。思路:O(n ^ 3)的DP解法是很容易想出来的。dp[i][j] 表示第i个矿石点是j个heap的最小花费。dp[i][j] = min(dp[i][j] , dp[k][j - 1] + sigm原创 2013-09-03 22:43:37 · 1378 阅读 · 0 评论 -
UVAlive 5875 DP
题意:给你一堆二维点,每个点有一些分数。现在要从点(0 , 0 )出发,只能从标号小的点走到大的点,每个人有一个走的距离的限制,问最后能拿到的最高的分数,当然这个人从(0 , 0)出发还得回到( 0 , 0 )。思路:用dp[i][j]表示在点i分数为j的最短距离,转移方程就是dp[i][j] = min(dp[i][j] , dp[k][j - w[k]] + Map[i][k]) 。原创 2013-09-03 17:29:41 · 1160 阅读 · 0 评论 -
HDU 3480 DP+斜率优化
题意:给你n个数字,然后叫你从这些数字中选出m堆,使得每一堆的总和最小,一堆的总和就是这一堆中最大值减去最小值的平方,最后要使得所有堆加起来的总和最小。思路:对这些数字排序之后,很容易想到DP解法,用dp[i][j]表示数字i现在在第j堆,那么转移方程就是dp[i][j] = min(dp[i][j] , dp[k][j - 1] + (a[i] - a[k + 1]) ^ 2)。因为已经排序原创 2013-09-04 12:04:01 · 896 阅读 · 0 评论 -
CF 189DIV2 E DP + 斜率优化
题意:给出两个数组,分别表示树的高度和树的补充能量的值。有两个人在锯树,这两个人的锯子很神奇,一次只能锯一颗树的高度1,也就是一次一颗树只减1。然后每次锯子锯完一次就要补充一下能量,这个补充的能量每次就是找到被锯完的ID最大的树,然后补充这个树的能量值。最后就是问,最少需要花费多少的能量,才能使得所有的树都被锯完。分析:显然是个DP。考虑到N = 10 ^ 5,那么二重DP肯定是不可以原创 2013-09-05 21:36:39 · 941 阅读 · 0 评论 -
DP练习
UVA Dance Dance Revolution 舞蹈家怀特先生。题意看黑书吧。好吧。。其实上面那个链接是我好不容易找到可以提交该题的。。不知道为什么UVA挂了。这道题在黑书里面介绍的非常详细,我这里贴一下使用滚动数组来优化的代码。有dp[x][y][z]存,当第z步的时候左脚在x,右脚在y的情况。dp[x][y][z] = min(dp[a[i]][y][i +原创 2013-08-03 17:23:32 · 1186 阅读 · 1 评论 -
POJ 2686 spfa+dp
题意:有m个城市,现在一个人要从a 走到 b ,城市之间有p条无向边,每条边都有权值,现在这个人有n张票,每张票有一个马的数量,这个人每走一条边就要使用一张票,每张票只能使用一次,假设从x -> y ,距离是z , 他使用一张票,马的数量是l ,那么从x -> y 花费的时间就是z / l 。问:从a -> b 最短的时间是多少。我们可以注意到,这道题的数据量非常小,n = 8 , m =原创 2013-09-16 21:31:48 · 840 阅读 · 0 评论 -
uvalive 5742 TSP
题意:给你N个小岛,每个小岛有一个初始坐标(x ,y) ,还有一个速度(vx ,vy),代表他一小时向x轴方向移动vx,向y轴方向移动vy。然后给你一个直升机的坐标(hx , hy) ,和直升机的速度hv。问:最少需要多少时间,可以使得直升机从(hx , hy)飞遍所有的小岛,并且回到(hx , hy),注意,每次飞到一个小岛上,需要驻留一小时。思路:显然是TSP。考虑到N = 8 ,原创 2013-10-02 18:42:04 · 1117 阅读 · 0 评论 -
ZOJ 3723 (浙大月赛)状压DP
A了一整天~~~终于搞掉了。真是血都A出来了。题目意思很清楚,肯定是状压DP。我们可以联系一下POJ 1185 炮兵阵地,经典的状压DP。两道题的区别就在于,这道题的攻击是可以被X挡住的,而且攻击的范围不同。这是这道题的攻击范围。但是这个攻击范围是会被X挡住的。所以得在1185上加以改进。分析:POJ 1185,因为可以隔着障碍物打,所以他每行的状态是一样原创 2013-08-08 11:12:26 · 1696 阅读 · 1 评论 -
HDU 4539 状压DP
这道题是腾讯马拉松的题,中文题,就不解释题意了。状压DP,同炮兵阵地,写着练练手。攻击范围是曼哈顿距离2,画个图能知道是这样的 x x xx o x下半部分就不画了。其实就是裸题。#include #include #include #include #include #include #include #inclu原创 2013-08-20 10:47:10 · 874 阅读 · 0 评论 -
POJ 1080 Human Gene Functions DP
题目就不解释了。这里讲一下转移方程,dp[i][j](匹配到字符串1的i位,字符串2的j位)=MAX(dp[i-1][j-1]+score[a[i]][b[j]](i,j位匹配),dp[i-1][j]+score[a[i]][](i位和'-'匹配),dp[i][j-1]+score[b[j]][ ](j位和'-'匹配));#include #include #include #i原创 2012-09-21 23:24:33 · 774 阅读 · 0 评论 -
POJ 1276 多重背包
模版题,贴个代码#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0)#define Max 100005#define inf 1<<28#define L原创 2012-09-22 00:14:02 · 703 阅读 · 0 评论 -
Dynamic Programming: From novice to advanced[翻译]
原博客地址http://www.cnblogs.com/drizzlecrj/archive/2007/10/26/939159.html Dynamic Programming From novice to advanced 【原文见: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg】转载 2012-09-22 00:16:44 · 891 阅读 · 0 评论 -
HDU 4323 编辑距离DP
题意:编辑距离,求满足步数小于d的个数。#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0)#define Max 2005#define inf 2000000原创 2013-06-03 00:19:23 · 1007 阅读 · 0 评论 -
CF 191 div2
A.数据量很小,直接爆搞。#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0)#define Max 2505#define inf 1<<28#define原创 2013-07-20 10:28:27 · 1493 阅读 · 0 评论 -
HDU 4628 多校第三场1008 dp
这题就没什么好说的了。直接枚举2 ^ 16 的状态,用1表示拿这位,0表示不拿,每次判断是否可以这么拿。#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0)#def原创 2013-07-31 13:42:55 · 1023 阅读 · 0 评论 -
定义区间DP(可以看看,写的非常简练)
区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。设F[i,j](1最小区间F[i,i]=0(一个数字无法合并,∴代价为0)每次用变量k(iFor p:=1 to n do // p是区间长度,作为阶段。 for i:转载 2013-08-01 19:49:57 · 1732 阅读 · 0 评论 -
HDU 4632 CF 245H 区间DP(回文)
先说HDU 4632这道题,因为比较简单,题意就是给你一个字符串,然后给你一个区间,叫你输出区间内所有的回文子序列,注意是回文子序列,不是回文字串。用dp[i][j]表示区间[i,j]内的回文子序列的个数。那么可以得到状态转移方程:dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1] + a[i] == a[j] 。#def原创 2013-08-02 19:30:34 · 1218 阅读 · 0 评论 -
POJ 2955 括号匹配,区间DP
题意:给你一些括号,问匹配规则成立的括号的个数。思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立。我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最少数量,那么设原来括号的数量为l , 添加了l' 。那么其实原来括号匹配成功的括号数就是((l + l') / 2 - l') * 2。#define N 105char a[N] ;原创 2013-08-02 21:45:02 · 942 阅读 · 0 评论 -
HDU 4649 多校第五场1007
虽然这次做了5题,但是居然还是有板刷题没过掉。。又是这节奏。。贴一下这道板刷题。。思路:每个数取他的二进制位,对于每一位,我们求他最后出现1的概率,那么最后的期望就是为1的概率乘以该位的十进制数,累加即可。想到状压就是水题。。。#include #include #include #include #include #include #include #inclu原创 2013-08-06 20:12:56 · 1119 阅读 · 0 评论 -
POJ 3616 DP
题意:给你N的时间,M的工作时间段,每个时间段有一个权重,还有一个R,每次完成一个工作需要休息R,问最后在时间N内,最大权重是多少。思路:很简单的DP,首先对区间的右坐标进行排序,然后直接转移方程就是dp[i] = max(dp[i] , dp[j] + work[i].c) ,判断条件就是这两个区间加上一个休息时间R是否会相交。#include #include #include原创 2013-10-13 09:42:42 · 944 阅读 · 0 评论