![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法·动态规划
文章平均质量分 71
ArthurFree
这个作者很懒,什么都没留下…
展开
-
Sicily.1342.开心的金明&&Sicily.1146.采药
经典的DP题,没什么好说,记住模板就好原创 2014-07-06 13:49:35 · 614 阅读 · 0 评论 -
Sicily1011动态规划
/* * Sicily1011Lenny'sLuckyLotto.cpp * * Created on: 2015年1月13日 * Author: Prophet */#include#includeusing namespace std;const int MAX_N = 10+2;const int MAX_M = 2000+10;int main(){原创 2015-01-13 16:42:30 · 546 阅读 · 0 评论 -
POJ2342AnniversaryParty
一道基础的树形DP,为我们基本讲解出树形DP的特点。按照我浅薄的理解,树形DP是把寻找最优算法放到树上进行,先是找到子根,然后往上递推回去,需要记录每个点的父根。这道题中我采取的方法是用数组记录一个节点的父根,也可以用vector,vector比较适用于记录自己的多子根,输入的时候进行处理,i对应的father[i]的值就是其父根。因为初始化为0所以最后值为0的i就是整棵树的父根。原创 2014-07-09 20:28:35 · 374 阅读 · 0 评论 -
POJ.1185.炮兵阵地
这道题也是压缩状态的经典题,和铺瓷砖那道题相比,这道题明显难了很多,前前后后花了我3个小时,实在是智商拙计。这道题主要运用了状态压缩的方法,在两个地方使用了压缩,首先是地形,其次是炮兵的布置。在输入中先对地形进行处理,还是用二进制法处理,然后转化为十进制压缩保存:其次是对行内合理炮兵布置进行枚举,行内合理的布置要满足的条件是相邻两个跑步距离要大于两个格,这里要采取一种很神奇的位操作,(原创 2014-07-07 23:48:07 · 441 阅读 · 0 评论 -
POJ.3176.Cow Bowling
这道题属于比较简单的DP,对于每个点way[i][j],其必然是经由way[i-1][j]或者way[i-1][j-1]而来的,因此设置way[i][j]数组,其值就是表示来到这点的最小距离。状态转移方程可知为: way[i][j]+=std::max(way[i-1][j],way[i-1][j-1]); 然而本道题的关键在于使用动态数组,虽然本题的数据规模不要求,但与这道题完全原创 2014-07-08 12:11:51 · 681 阅读 · 0 评论 -
Sicily. 1419. On the run(牛奶快递)
这道题有那么一点难度,主要在于设计出求解的方法。这道题有点像磁盘调度的最短路径算法(SJF)。其实问题有点变形,变成:怎样选择最短路径的算法似的路径最短。解题之前说点题外话:我感觉这个地方有点迷糊,也就是说,一个数轴上给定若干个点,从其中某个点出发遍历所有的点所耗的时间,会因其选择遍历先后的次序有关。这个我想了一下觉得似乎不会因次序有关,如果真的是因次序有关,那么在操作系统中的SJF算法的基础原创 2014-07-06 22:40:14 · 1176 阅读 · 0 评论 -
POJ.2411. Mondriaan's Dream
这道题是压缩状态DP的经典题,经典到我百度这个题出了两三页的解题报告,但我看了前前后后快4个小时,还是不怎么明白,先把现在的思路写下。题意的简单也奠定了这道题的经典性:给定一个m*n的面积,用2*1的瓷砖横贴或者纵贴铺满,不考虑对称性问有多少种铺法。在做这道题的时候第一次接触到“压缩状态DP”,按照我的理解,所谓的压缩状态DP就是把每种递推情况用一个更简洁(比如一个数)来表达,一个数推出另外的原创 2014-07-07 12:56:40 · 386 阅读 · 0 评论 -
Sicily.1264. Atomic Car Race
一道挺简单的DP题。关键在于理解题意。这道题设了不少的语言难度在里面,要理解行驶时间的计算以及最短行驶时间的推导。首先来看下行驶时间,这个很关键,我刚开始做的时候觉得这道题不知所云就是因为理解不了这里。其实这个计算是个幌子,题目中提到“The time torun an interval of one kilometer from x to x + 1 is given by the foll原创 2014-07-06 12:56:55 · 1182 阅读 · 0 评论 -
Sicily.1001.Alphacode
Sicily.1001.Alphacode一道经典的DP题。一看题就去百度找答案了,找到不少博文是解这道题,但都只是把解决方法写出来,没有解释,那我来解释一下:首先,解这道题的基本思路(不考虑各种极端情况)是:一个字母码的解数=去掉最后一位的解数+去掉最后两位的解数即递归方程为:dp[i] = dp[i-1]+dp[i-2]比如:“25114”的解数 = “2511”的解数原创 2014-07-05 23:31:46 · 631 阅读 · 0 评论 -
Sicily1828Minimal
/* * Sicily1828Minimal.cpp * * Created on: 2015年1月13日 * Author: Prophet */#include#include#includeusing namespace std;const int MAX_M = 500+5;int main(){ int TestCase; scanf("%d",原创 2015-01-13 17:34:50 · 458 阅读 · 0 评论