DP——动态规划
文章平均质量分 66
zxy_snow
这个作者很懒,什么都没留下…
展开
-
zoj 1076 Gene Assembly
发现我都做400多道了水题还是这么多。。。以前肿么没发现呢。。。也是,没做过贪心分类里的题,汗。现在刷ZOJ论坛里贪心分类里的题。这个是DP呀,最长上升子序列,输出序列#include #include #include #include #include #include #include #include #include #i原创 2012-05-02 13:10:08 · 4183 阅读 · 0 评论 -
zoj 1093 || hdu 1069 Monkey and Banana( Easy DP )
继续水DP。应该第一次就AC的,数组开小了,悲剧啊。摞砖头,砖头的长宽高可以互换。等于说,每个砖头有三种情况,三个底,三个高。题目要求,砖头可以无限取,但是上面的砖头的底面必须完全包含于下面的砖头的上面。因为相同长宽的面不可以放一起,所以每种砖头只能取三种情况,也就是原创 2011-08-13 14:59:01 · 1520 阅读 · 0 评论 -
nyist 15 括号匹配(二)
经典DP题啊,看着黑书学的。虽然它作为DP来讲,算是很水吧,不过说下我的理解吧。枚举步长,相隔0个字符的两个字符,相隔1个的,相隔2个的。。等等。假设在求相隔N个的字符时的两个字符的情况时,他俩中间的所有情况都已经考虑到了,所以只需要把他划分一下(划分成,(1,x )+ (x,N原创 2011-07-19 09:55:12 · 1028 阅读 · 0 评论 -
poj 1088 滑雪
我还是缺少DP的思维啊。大家这题都是用记忆化搜索,我这个算是什么方法呢 = =。。因为只能从高往低滑,所以就排下序,从高度最高的点开始更新周围比它低的点即可。记忆化搜索啊,感觉就是搜过的直接return就好了。。。#include #include #include #in原创 2011-07-18 22:19:07 · 599 阅读 · 2 评论 -
最长XX子序列N*LOGN算法
利用二分查找。开一个数组c,c[i] 保存长度为 i 时的最小值。更新的时候找比a[i] 小的最长的,也就是c[k] 中k最大的,因为c是个单增的序列,所以用二分找。http://blog.csdn.net/bobcowwocb/article/details/4536092zo原创 2011-07-19 17:04:45 · 933 阅读 · 1 评论 -
nyist 252 01串
http://acm.nyist.net/JudgeOnline/problem.php?pid=252直接打表,记录长度为K的时候末尾为0的个数和末尾为1的个数,转移方程就是 dp[i][0] = dp[i-1][1] + dp[i-1][0]; dp[i][1] = dp原创 2011-07-18 23:16:23 · 886 阅读 · 0 评论 -
hdu 1224 Free DIY Tour
某小朋友给的DP题。求从1然后再到达1值的最大,给出路径了。只能有小节点到大节点的路。一开始感觉,这不就是FLOYD 么 = =。。不过需要输出路径,我还没写过floyd记录路径的,只写过dijkstra的。。。然后往DP方面想,类似数字三角形了都,从下往上推,注意更新的时候一定原创 2011-07-18 18:48:53 · 794 阅读 · 0 评论 -
poj 1191 棋盘分割
黑书例题,上午写了写。黑书上讲的很清楚,经化简,只需求得切割后每个矩形的总分的平方和最小即可。然后可以横切和竖切,枚举切的位置即可。初始化s中存的是x1 y1 到 x2 y2的和的平方,这个可以直接循环求得,我求的比较麻烦,求出0 0 到x2 y2的,然后x1 y1 到 x2 y原创 2011-07-18 17:13:52 · 1217 阅读 · 0 评论 -
BZOJ 1579 Revamping Trails
题目链接http://www.zybbs.org/JudgeOnline/problem.php?id=1579某小朋友给的题,无奈不会做。T T。后来一问知道是用动态规划,搜了下,感觉好神奇。两种方法,一种是建立层次图,然后求最短路即可。(这个层次图特点是,把所有可能路径(包括原创 2011-07-17 18:59:20 · 1869 阅读 · 0 评论 -
zoj 3516 Tree of Three
一看,恩,感觉以前见过类似的,貌似是树形DP。。正在纠结着呢,党姐说这个可以用DFS解 = =。。想想也是,从根开始搜,回溯的时候更新父节点的前三个最大值即可。话说。。。树形DP是神马。。#include #include #include #include #inclu原创 2011-07-24 22:50:31 · 1094 阅读 · 0 评论 -
zoj 1666 Square Coins
<br />这个题是很早以前就放在“看过但是未解决”里的DP题。。。><。。。<br /> <br />前天做了ural那个DP后,就觉得和这题类似,翻出来,想了半天,还是无果。。。让党姐做了,党姐秒掉了,让我情何以堪啊啊啊啊。。<br /> <br />我又看了看,觉得完全背包可以,dp[k] += dp[k-c[i]];存的是由c[i]和小于c[i]的平方数组成的状况下,价值为k的种类数。<br /> <br />做完搜了下,觉得我这个和他们的思想是差不多的哈。。<br /> <br />#includ原创 2011-05-03 18:21:00 · 1241 阅读 · 0 评论 -
2011轻工校赛 E 懒人
http://acm.zzuli.edu.cn/showproblem?problem_id=1481原创 2011-05-03 12:30:00 · 1387 阅读 · 0 评论 -
zoj 1733 || hdu 1159 Common Subsequence(Easy , classics DP)
经典水DP,求最长公共子串。以前写过,不过忘记了 = =。。重来。开始想繁了,写了个O(N^4)的,果断TLE了。因为记录的是a串以i为结尾b串以j为结尾的最大长度。后来想了想,直接记录以a串第i个位置之前,b串j之前的最大长度。如果a[i] == b[j]原创 2011-08-13 16:54:54 · 807 阅读 · 0 评论 -
hdu 1176 免费馅饼
拉拉拉拉拉拉~~~~~~~dp水水~~~~~~~~~~~~好不容易AC之后,看status,发现这题被zzuli的小盆友们集体虐过,ORZ。。。这题开始想得有问题,没考虑中间间隔时间大的话肿么样。今晚想了想,改成按时间DP,因为当前时间的状态只和上一秒状态有关。原创 2011-08-13 21:18:45 · 2544 阅读 · 4 评论 -
URAL 1073. Square Country
这题,给你N钱,求投资的最小块。N钱肯定会用完的,因为最小是1嘛。。。 开始就是往背包上想,多重背包转换为多重背包,然后仨循环,绝对超时的,然后BTW一提醒,我想起来完全背包的另一个版本了,类似01的只不过循环从1开始了,想了想,写了写,居然搞出来了T T。。 打表的时候,价值的表存的是钱x下用的最少的块数,类似一般背包中的v数组。w数组就是平方啦,然后就完全背包就好啦。原创 2011-05-01 18:33:00 · 1115 阅读 · 0 评论 -
Codeforces Beta Round #2 B
纪念下如此2B的题号。。。DP啊,神啊,我看见DP俩字就颤 = =第一反应是把每个数都分解为几个2几个5,以前ZOJ有道水题是计算多少个数乘积后有几个零,就是那种做法。然后想着DP下最小的2或者5,想着不对,因为前面的2或者5的选择会影响后面,结果纠结了。CFY说了个做法,扫两遍,单独计算2,5,然后目标点取最小的那个值即可。。。大悟。。T T 。。找路径的话,就相当于原创 2012-02-06 14:28:51 · 3666 阅读 · 2 评论 -
hdu 1248 寒冰王座(完全背包水水版!)
这个是完全背包,可以看做容量和价值相等的完全背包。 求出可以买的价值最多的,然后用总钱减去即可。#include #include #include #include using namespace std;int w[3] = {150,200原创 2010-11-18 23:42:00 · 1293 阅读 · 1 评论 -
hdu 1421 搬寝室
DP。这题初看就感觉变换下应该比较好做,先排序,然后可以相邻两个数相减,然后求K个不相邻的数的最小和。后来觉得这个思路不会找K个不相邻数最小和 T T。。后来PPT上也有讲,找I个物品选K对。吃饭回来想了下,也不算麻烦。想清楚后开始搞 = =。。发现。。初始化真恶原创 2011-08-14 20:17:44 · 1730 阅读 · 0 评论 -
hdu 2151 Worm(Easy DP)
水题。跟那个免费馅饼的差不多,直接按时间DP。我开始的时候把1分钟的方案算出来了,然后以后的状态直接由上一分钟的状态累和即可。DP的初始化很关键啊很关键啊。#include #include #include #include #include #inclu原创 2011-08-14 13:25:59 · 1149 阅读 · 0 评论 -
hdu 2084 数塔(DP水)
这个题经常被拿来当入门题呢,貌似以前做过。。。今天上午小白还给新人讲这个呢。应该有两种做法吧,从上往下和从下往上推。我还是喜欢用从上往下推。。#include #include #include #include #include #include原创 2011-08-14 13:14:49 · 996 阅读 · 0 评论 -
hdu 1160 FatMouse's Speed(水DP)
最长XX子序列,预处理需要排序,我的是按体重升序排序的,相同的降序处理。寻找具体老鼠是从后往前推,如果记录的以ind 结尾的老鼠的最长XX序列 == 下一个结尾的老鼠的个数 - 1,那么说明后面那个点是经过这个点更新的(多种情况,任一均可)。当然这个老鼠也要符合体重,速度原创 2011-08-14 10:12:50 · 1279 阅读 · 0 评论 -
hdu 1466 计算直线的交点数
又做被zzuli小盆友虐过的DP题 T T。。我好弱。。这个题纠结了一会的,hdu的PPT上有说这个,但是说的不好,处于看不懂状态。但是隐约知道和之前状态有关。然后手动模拟了下,比如第N条和其中两条直线重合,那么就有三条直线平行了,那么这三条和其他N-3条直线的交点个数就原创 2011-08-14 09:45:26 · 1225 阅读 · 0 评论 -
zoj 1095 || hdu 1058 Humble Numbers( DP || 乱搞)
这个。。。我没用DP做,直接打表然后sort了 = =。。后来CG小盆友给我讲的DP做法,应该是每次乘过一个因子,那么这个因子对应的数就向前走一步,下次计算的时候就直接拿对应的最小数去乘以对应的因子,找到最小值。DP方法网上一堆,我就不写了。打表方法。#inclu原创 2011-08-13 16:06:41 · 1029 阅读 · 0 评论 -
hdu 2059 龟兔赛跑
DP。纠结好久了都。最终还是有点考虑错了。我想的是按位置DP,状态是在加油站 加油,或者不加油。然后取之前状态的时间最小值。但是我考虑的一直是上个状态,这个有问题。应该考虑之前所有状态的。这样的话,取之前所有状态加油,或者不加油的最小值。用二维DP存,存的是当前节点还原创 2011-08-14 17:21:53 · 1829 阅读 · 1 评论 -
hdu 2577 How to Type(DP水)
这不是轻工校赛那个题么~~~~~!!!!!!!!当时比赛我们都没咋想清楚,他俩脑子混沌中,我一激动,拿优先队列+BFS+剪枝过了 = =。。。后来知道数据很弱,不需要剪枝。。。- - 。。。后来知道这是DP题。。。后来我也拿DP过了。。。今天又遇到了,脑子已经清楚很多了。原创 2011-08-14 10:29:56 · 1246 阅读 · 4 评论 -
hdu 1087 Super Jumping! Jumping! Jumping!(水DP)
求最大上升子序列的和。记录以每个点为终点的最大和,下一个只要判断是否比前面大,如果大的话,取max{dp[i]+a[k]}。网上搜了下,没有O(N)的算法。我也想不出来O(N)的 T T 。#include #include #include #includ原创 2011-08-13 14:09:44 · 1286 阅读 · 1 评论 -
URAL 1012. K-based Numbers. Version 2
和1009一样,只不过需要用大数~~!!#include #include #include #include #include #include #include #include using namespace std;const int MAX = 1010;int dp[20][200][MAX];int len[20][200];int main(){ int n,k; memset(dp,0,sizeof(dp)); for原创 2011-05-01 11:16:00 · 1817 阅读 · 1 评论 -
URAL 1009. K-based Numbers
开始跟着BTW做DP题。。计算几何我还会一直学的,DP也同步学吧。BTW推荐的URAL这个。。。分类里有几十道DP。。。任重而道远~!这个水题哈,想了会儿,拿K=2模拟了下,发现基本和斐波那契数列差不多。在n,k下,第二位为1的情况等于在n-2,k的情况 + n-1,k的情况,再乘以首位不为0的情况(k-1)。。。开始一直拿2模拟的,忘记乘以首位不为0的了,N,K输入次序搞反了,WA得一塌糊涂T T 。。。int盛不下,long long可以。#include #include #include原创 2011-05-01 10:40:00 · 1831 阅读 · 0 评论 -
ural 1247. Check a Sequence
Ai + Ai+1 + … + Aj ≤ (j – i + 1) + N 等价于 Ai-1 + Ai+1-1 + … + Aj -1≤ N直接求最大子段和与N比较即可。#include #include #include #include #include #include #include #include #include #includ原创 2011-06-04 13:38:00 · 668 阅读 · 0 评论 -
zoj 3171 The Hidden 7's(= =。类似昨天FZU月赛D题)
<br />昨天的FZU月赛让我充分感受到差距了。好好努力。<br /> <br />这道题比FZU昨天的D题稍微繁一点点,都是很水的 = = 。。<br /> <br />这个能叫DP么。。我觉得不像耶。<br /> <br /> <br /> <br />我当时想就是314嘛,算出1前面有多少个3,然后算4前面有多少个1,以4前面的1前面的3的个数累和即可。<br />如果不是昨天做D题,或许这个题估计做着会不怎么顺。。。这个就类似314,只不过多了点而已。说得纠结,其实看代码很容易懂的。<br />昨原创 2010-12-27 12:27:00 · 1035 阅读 · 3 评论 -
经典的01背包问题
<br /><br />经典的01背包问题<br />对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!<br />----第一节----初识动态规划--------<br />经典的01背包问题是这样的转载 2010-11-03 13:52:00 · 1789 阅读 · 0 评论 -
10年 ZZUPC校赛第四题 作业题
作业题TimeLimit: 1000MS MemoryLimit: 32768 KbDescription 小白同学这学期有一门课程叫做《数值计算方法》,这是一门有效使用数字计算机求数学问题近似解的方法与过程,以及由相关理论构成的学科... 今天他们的Teacher S,给他们出了一道作业题。Teacher S给了他们很多的点,让他们利用拉格朗日插值公式,计算出某严格单调函数的曲线。现在小白抄下了这些点,但是问题出现了,由于我们的小白同学上课时走了一下神,他多抄下来很多点,也就原创 2010-12-13 12:50:00 · 1015 阅读 · 0 评论 -
10年 ZZUPC校赛第六题 三国志(最短路+01背包)
<br /><br />三国志<br />TimeLimit: 5000MS MemoryLimit: 32768 Kb<br /><br />Description<br /> 《三国志》是一款很经典的经营策略类游戏。我们的小白同学是这款游戏的忠实玩家。<br /> 现在他把游戏简化了一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占有的空城,但是这些空城中有很着不同数量的同种财宝。我们的小白同学虎视眈眈的看着这些城池中的财宝。<br />原创 2010-12-13 11:44:00 · 1208 阅读 · 0 评论 -
zoj 1025 || poj 1065 Wooden Sticks(DP做法)
<br />最长XX子序列小变形。<br /> <br />学习了下,详见 http://blog.csdn.net/wmbol/archive/2010/04/05/5450952.aspx<br /> <br />还有党说的删除最大串,然后再DP,再删再。。。这里的DP就是类似找最长XX子序列了。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>#include原创 2010-12-09 17:38:00 · 1746 阅读 · 3 评论 -
07年 ZZUPC校赛第五题 合唱队形(最长XX子序列。。)
<br /> <br />Problem E:合唱队形<br /> <br /> <br />【问题描述】<br /> N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。<br /> 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。<br /> 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出原创 2010-12-08 23:43:00 · 1783 阅读 · 1 评论 -
zoj 1986 || poj 1631 Bridging Signals(最长上升子序列N*logN)
<br />和ZOJ 2316 差不多,不过这个是用单调队列+二分优化了,不优化过不去。<br /> <br />单调队列是保证里面元素是单调的,这样的话,取其中最大的值是O(1)的,如果有数比队尾元素小,就用二分查找,找到它的位置替换。<br /> <br />原理详见http://blog.csdn.net/Hashmat/archive/2010/09/14/5883605.aspx<br /> <br />我的二分写得比较纠结,改了好久才对 = =。。。<br /> <br />#include <原创 2010-12-06 12:02:00 · 1002 阅读 · 0 评论 -
poj 3628 Bookshelf 2( 0-1背包。)
搜的01背包题。这个相当于体积和价值一样大的01背包。我做的可能麻烦了点。貌似有搜索过的。还有其他的状态方程的。我DP做的少。。。只会这个状态方程了。。。YM。将所有背包容量情况#include #include #include #include #include #include using namespace std;int w[1000002],bag[20000005];int main(void){ int n,c; while( scanf("%d原创 2010-12-03 13:28:00 · 1679 阅读 · 1 评论 -
09年 ZZUPC校赛第四题 多重背包 最大杀伤力
最大杀伤力TimeLimit: 1000MS MemoryLimit: 32768 Kb Totalsubmit: 9 Accepted: 5 DescriptionBean最近一直在沉迷DNF,但因为等级比较低,所以在PK场里总会被人“虐”,于是,Bean就想进行“地狱式”的训练。Bean现在的MP值还有K点,并且具有N个技能,对于每个技能的使用,都会消耗掉MP值,当然同时也会对敌手造成一定的杀伤力。. 在目前的状况下,Bean想让你帮他规划一下,如何使用这些技能,最后对敌手造成杀伤力最大。原创 2010-12-03 13:18:00 · 817 阅读 · 2 评论 -
zoj 1733 || poj 1458 Common Subsequence(最长公共子序列)
以前做的 今天看到一道类似的题,找不到解题报告。。。貌似忘写了。补一下。这个的状态方程的意思是,两个序列,A B,A的前 i( 0 #include #include #include #include #define MAXLEN 300using namespace std;int maxlen[MAXLEN][MAXLEN];int main(void){ char str[MAXLEN],line[MAXLEN]; int lens,lenl; while原创 2010-11-26 12:37:00 · 1306 阅读 · 2 评论 -
poj 1661 Help Jimmy
<br />DPDPDPDPDPDPDPDP。。。。<br /> <br />强大的DP。。。<br /> <br />搜的资料上有讲解这题的,一直没看懂,搜了好多人的代码,比较看来,还是资料上的好点。基本完全照抄了。中间还搬错的有,害我找了好长时间。。把那y改成x就OK了,崩溃!<br /> <br />怎么说呢,这种方法还凑合,会思考下这一步为什么这么做,因为DP还是不熟练,自己写的话写不出来。。。<br /> <br />这道题求时间最短,把这个问题分解为,左端到达低端时间最短时间,和右端到达低端最短原创 2010-07-28 14:33:00 · 3009 阅读 · 12 评论