dp
文章平均质量分 68
hexianhao
这个作者很懒,什么都没留下…
展开
-
poj 2231Moo Volume
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 20699 Accepted: 6249DescriptionFarmer John has received a noise complaint from his neighbor, Farmer Bob, stating t原创 2015-12-08 19:47:06 · 330 阅读 · 0 评论 -
poj 1160(Post Office)
http://poj.org/problem?id=1160先讲讲我的思路:这道题首先很容易想到是用动态规划思想,所以我定义了一个二维数组dp[i][j],表示前j个位置,修建了i个邮局。所以推导出的状态转移方程为:dp[i][j] = min{dp[i][j-1]+第j个位置到第i个邮箱位置的差,dp[i-1][k] + 第j个位置到第k+1个位置的差},实际上花括号里,左边代表原创 2015-12-10 10:36:52 · 510 阅读 · 0 评论 -
hdu 1881(简单01背包)
毕业bgTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”。参加不同团体的bg会有不同的感觉,我们可以用一个非负整数为每个bg定义一个“快乐度”。原创 2015-12-11 17:02:58 · 369 阅读 · 0 评论 -
hdu 5418(状态压缩dp+Floyd)
点击打开链接解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次。。。。这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费,那么状态方程也很容易推理出来dp[i][j] = min(dp[k][j-1AC:#include#include#includeusing namespace s原创 2015-12-28 15:26:29 · 373 阅读 · 0 评论 -
poj 1745
解题思路:dp表示的为dp[i][j]前i个数是否能够组成余数为j,是则为1 #include using namespace std;#define MAXN 10001int dp[MAXN][101];int posmod(int n,int k){ //正数取余 n = n % k; while(n < 0) n+=k; return n;}int main(转载 2015-12-13 20:46:21 · 257 阅读 · 0 评论 -
hdu 5045(状态压缩dp)
ContestTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/OthersProblem DescriptionIn the ACM International Collegiate Programming Contest, each team consist of thre转载 2015-12-30 12:03:54 · 333 阅读 · 0 评论 -
poj 1821(DP+单调队列优化)
FenceTime Limit: 1000MS Memory Limit: 30000K DescriptionA team of k (1 <= K <= 100) workers should paint a fence which contains N (1 <= N <= 16 000) planks numb转载 2015-12-15 19:52:39 · 426 阅读 · 0 评论 -
hdu 1494(DP)
跑跑卡丁车Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种加速卡,用这种加速卡可以在有限的时间里提原创 2015-12-30 17:30:33 · 349 阅读 · 0 评论 -
nyoj 229
http://acm.nyist.net/JudgeOnline/problem.php?pid=229#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 110;int Ap[MAXN];int Bp[MAXN];int dp[MAXN];//dp[i]表示完成i个工转载 2015-12-04 23:02:07 · 468 阅读 · 0 评论 -
nyoj1204
魔法少女 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 前些时间虚渊玄的巨献小圆着实火了一把。 在黑长直(小炎)往上爬楼去对抗魔女之夜时,她遇到了一个问题想请你帮忙。 因为魔女之夜是悬浮在半空的,所以她必须要爬楼,而那座废墟一共有n层,而且每层高度不同,这造成小炎爬每层的时间也不同。不过当然,小炎会时间魔法,可以瞬间飞过一层或者两层[即不耗时]。但每次瞬移的时原创 2015-12-05 15:31:13 · 385 阅读 · 0 评论 -
hdu 2577(DP)
How to TypeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionPirates have finished developing the typing software. He called Cathy to test原创 2015-12-24 15:37:15 · 249 阅读 · 0 评论 -
hdu 2059(dp)
龟兔赛跑Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成了绝技,能够毫不休原创 2016-01-09 08:48:32 · 295 阅读 · 0 评论 -
hdu 1158(DP)
Employment PlanningTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionA project manager wants to determine the number of the workers needed原创 2015-12-24 17:18:43 · 217 阅读 · 0 评论 -
hdu 4529(状态dp)
郑厂长系列故事——N骑士问题Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 还是那个腾讯公司的码农 一个业余时间喜欢下棋的码农 最近转载 2016-01-09 17:32:26 · 433 阅读 · 0 评论 -
poj2397 Spiderman
SpidermanTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1634 Accepted: 624 Special JudgeDescriptionStaying fit is important for every superhero, an转载 2015-12-08 17:14:35 · 495 阅读 · 0 评论 -
hdu 1074(状态压缩dp)
Doing HomeworkTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionIgnatius has just come back school from the 30th ACM/ICPC. Now he has a lo转载 2015-12-26 09:45:44 · 244 阅读 · 0 评论 -
hdu 2167(状态压缩dp)
PebblesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionYou're given an unlimited number of pebbles to distribute across an N x N g原创 2016-01-28 17:59:35 · 320 阅读 · 0 评论 -
hdu 2155(dp)
小黑的镇魂曲Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description这个事情发生在某一天,当小黑和SSJ正在约会的时候,邪恶的Guner抓走了SSJ,小黑伤心万分,怒不可遏啊!但是他显然也是没有办法的,谁叫Guner比小黑邪恶,小黑原创 2016-01-29 09:08:58 · 451 阅读 · 0 评论 -
hdu 5273(递推)
Dylans loves sequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 917 Accepted Submission(s): 426Problem DescriptionDylans i原创 2016-01-29 20:07:50 · 314 阅读 · 0 评论 -
hdu 2859(DP)
PhalanxTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionToday is army day, but the servicemen are busy with the phalanx for the celebr原创 2016-01-30 16:06:33 · 407 阅读 · 0 评论 -
hdu 3920(状态压缩dp)
Clear All of Them ITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 122768/62768 K (Java/Others)Problem DescriptionAcmers have been the Earth Protector against the evil enemy for a原创 2016-01-30 17:40:05 · 343 阅读 · 0 评论 -
nyoj 304(区间dp)
解题思路:这道题很明显是用区间dp,可是与以往的区间dp不同,因为对于区间[i,j],机器人所处的位置要么在i,要么在j(因为机器人要移动到某一点才能关闭灯泡,所以对于某一段区间来说,机器人最后肯定在两个端点上,否则将不能成立),那么既然要表示在左端点还是右端点,所以我们再开三维数组dp[i][j][0]表示停留在i点,dp[i][j][1]表示停留在j点,那么剩下的就是状态方程了,跟普通的区间d原创 2016-03-01 19:15:07 · 320 阅读 · 0 评论 -
hdu 5074(简单dp)
Hatsune MikuTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Problem DescriptionHatsune Miku is a popular virtual singer. It is very popular in both Jap原创 2016-02-01 09:56:17 · 363 阅读 · 0 评论 -
hdu 1511(dp)
转载标记处:http://blog.csdn.net/my_acm_dream/article/details/41577645解题思路:两次dp确实很巧妙,我只想到了一次dp算出最后那个数最小,其实题目要求还要保证第一个数尽可能大,一开始也没有注意到。。AC:#include#include#include#include#include#include#原创 2016-02-18 14:31:05 · 397 阅读 · 0 评论 -
hdu 1510
White RectanglesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionYou are given a chessboard made up of N squares by N squares with equa原创 2016-02-18 17:02:10 · 584 阅读 · 0 评论 -
poj 2346(DP)
题意:n位数,满足前n/2个数字之和同后n/2个数字之和相同的数一共有多少个?解题思路:dp[i][j]表示前i个数的和为j时,有多少个;递推关系:dp[i][j] += dp[i-1][k], k表示前i-1个数的和,由于每一位只能是0-9,所以有限制条件:9 >= j - k >=0由于对称性,只需要枚举到n/2即可,剩下的就是简单的乘法原理。#原创 2016-02-25 19:15:45 · 344 阅读 · 0 评论 -
hdu 1078(记忆化搜索)
题意:老鼠每次最多走k步停下来,停下的这个位置只能比上一个停留的位置大,并获取其价值,每次只能水平或垂直走,问最大能得到的价值解题思路:这道题可以用记忆化搜索解决,dp[i][j]表示老鼠在位置(i,j)时可以达到的最优值。因为dp的状态是一个有向无环图,刚开始想会不会走死循环,但是这道题有一个条件:下一个位置比当前位置的值要大,所以说既然能到当前位置,那么之前的位置是不可能再次走到的。记忆化原创 2016-04-06 09:29:12 · 260 阅读 · 0 评论 -
hdu 1208(简单dp)
题意:从[1,1]出发到[n,n],每次到达的格子都要按照格子里的数字走。问可以走到终点的数量是多少。解题思路:简单的递推就可以了。。。#include#include#includeusing namespace std;__int64 dp[40][40];int n,map[40][40];char str[40];int main(){ whi原创 2016-04-06 16:21:54 · 327 阅读 · 0 评论 -
hdu 2881(简单dp)
题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少解题思路:简单dp,将时间排个序后就是LIS#include#include#include#include#includeusing namespace std;const int maxn = 10005;struct No原创 2016-04-07 17:08:59 · 370 阅读 · 0 评论 -
hdu 1516(编辑距离+记录路径)
解题思路:这道题的基本模型就是编辑距离的模型,只是多了一个路径记录的过程。学习一下:http://www.cnblogs.com/biyeymyhjob/archive/2012/09/28/2707343.html最开始把问题搞错了,以为是两个串都可以做修改,无论我怎么想都不通。回到这个题目上,这道题和最长公共子序列很相似,思路可以说是一样的,包括记录路径。其实也就是原创 2016-04-07 21:03:09 · 1014 阅读 · 0 评论 -
hdu 1506(dp || 单调栈)
题意:这题是要找最大的矩形面积。解题思路:这题的关键是要找每个条形能够往左和往右能够到达的最大长度。我最开始的思路是单调栈去维护,只要入栈的元素比栈顶元素小,栈顶就要出栈,并且知道其最右能够到达的最远距离。当要入栈的元素已经找到了位置,那么它左边的元素所在的位置就是其能到达的最左距离。这道题比较坑,要用__int64位,而且在当栈为空时,加入的新元素的最左是能够到达1的,这里我开始原创 2016-04-08 16:00:44 · 461 阅读 · 0 评论 -
poj 3280(简单区间dp)
题意:将一个字符串转换成回文串的最小花费。解题思路:简单的区间dp,dp[i][j]表示从i到j的字符串转换成回文串的最小化费。#include#include#includeusing namespace std;const int maxn = 20005;int n,m,dp[maxn][maxn],insert[26],del[26];char str原创 2016-04-09 08:35:32 · 293 阅读 · 0 评论 -
hdu 1505(矩阵dp)
解题思路:这道题是1506的加强版,在处理过程中,把所有的F变成1,R变成0,定义dp[i][j]表示第i行,第j列的数上面有多少个连续的1,这样就可以成功地和1506扯上关系了。对于第i行中,1-m列都会有dp[i][j],这样是不是就是对于第i行的矩形条的合并了。。/*#include#include#includeusing namespace std;const原创 2016-04-08 19:52:39 · 198 阅读 · 0 评论 -
hdu 2830(矩形dp)
解题思路:这道题是hdu1505的更加强版本,实际上理解了前面的两道题,这道题很简单了,只是多了一个排序的过程。仔细想想,为什么会是多了排序的过程。因为我们的目标还是找到最大的全1矩阵,那么之前的思路肯定是不变的,关键就在于矩形的列是可以交换的,而且可以交换多次。其实这里不要多去想交换的中间过程是怎么样的,我只要知道,最优的情况肯定是按递增的或者递减的就好了。这样想,那么之前的交换不就是变成了一个原创 2016-04-08 20:37:30 · 376 阅读 · 0 评论 -
poj 1821(单调队列优化dp)
题意:有一道线性篱笆由N个连续的木板组成。有K个工人,你要叫他们给木板涂色。每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到的钱。要注意的是,工人i可以选择不涂任何木板,否则,他的涂色区域必须是连续的一段,并且S[i]必须包含在内。 最后还有,每块木板只能被涂一次。 解题思路:这是一道单调队列优化dp的问题原创 2016-04-25 17:51:27 · 456 阅读 · 0 评论 -
poj 2373(单调队列优化dp)
在长为L(的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b]。要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必须被某一个喷水头覆盖,而不能由多个喷头分段完全覆盖,求喷水头的最小数目。解题思路:这道题是单调队列优化dp,状态方程很容易想到,关键是优化问题,那么我们就需要维护一个队列放dp[j],使得队列中的元素j至少原创 2016-04-25 20:28:16 · 781 阅读 · 0 评论 -
poj 3616(简单dp)
题意:你有一头奶牛,你能够在一定的时间里挤奶。而且挤奶量也不同,每次挤奶要休息r时间,问你最大可以挤多少奶。解题思路:这道题就是单调递增子序列的模型,dp[i]表示前i个任务可以得到的最优值。两层循环就搞定。不知道为什么老是RE,#include#include#include#includeusing namespace std;const int maxn =原创 2016-04-13 16:07:25 · 319 阅读 · 0 评论 -
hdu 1024(滚动数组优化)
本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题。解题思路:dp[i][j]表示前j个数分成i组,且j在第i组里的最大值。dp[i][j] = max{dp[i][j-1]+a[j],dp[i-1][k]+a[j](i-1但这道题的n很大,空间复杂度太高,所以要用滚动数组。max( dp[i-1][k] ) 就是上一组 0....j-1 的最大值。我们可以在每次计原创 2016-04-13 17:20:04 · 488 阅读 · 0 评论 -
poj 1141(区间dp+打印路径)
题意:定义合法的括号序列如下:1 空序列是一个合法的序列2 如果S是合法的序列,则(S)和[S]也是合法的序列3 如果A和B是合法的序列,则AB也是合法的序列例如:下面的都是合法的括号序列(), [], (()), ([]), ()[], ()[()]下面的都是非法的括号序列(, [, ), )(, ([)],原创 2016-04-14 10:59:43 · 262 阅读 · 0 评论 -
poj 2288(状态压缩dp + TSP问题)
题目描述:哈密尔顿路问题。n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算:1.每一个点的权值之和2.对于图中的每一条CiCi+1,加上Vi*Vi+13.对于路径中的连续三个点:CiCi+1Ci+2,若在图中,三点构成三角形,则要加上Vi*Vi+1*Vi+2求一条汉密尔顿路可以获得的最大值,并且还要输出有多少条这原创 2016-04-14 20:28:28 · 356 阅读 · 0 评论