Dynamic Programming
小小程序师
我的微信公众号:CodingRush
我的微博:小小程序师 http://weibo.com/2110664035/
展开
-
POJ 1976 A Mini Locomotive (动态规划)
哈哈这是一道典型的动态规划,呵呵有背包的思想在里面,但是还是要根据题目灵活运用。先说说题目的意思吧:题目的大概意思就是说给你n个数,然后就是有三辆货车头可以拉连续k辆车厢,问你这三个火车头最终可以拉的最大的乘客数是多少。我们首先定义dp的含义吧,dp[i][j]表示用i个火车头,原创 2011-07-08 01:44:33 · 2074 阅读 · 0 评论 -
POJ 2127 Greatest Common Increasing Subsequence (动态规划)
http://poj.org/problem?id=2127 这道题目就是求两个序列的最长公共上升子序列,序列的长度不超过500,那么我们使用O(N^3)复杂度的算法也能过。 我们假设数组A和B分别为这两个序列,我们定义状态dp[i][j]表示以A[i]和B[j]结尾的并且LCIS的最后一个元素小于A[i]的值,也就是说dp[i][j]并不一定是串A[1--i]原创 2012-12-23 16:22:42 · 1448 阅读 · 0 评论 -
HDU 1028 整数的划分(动态规划)
这道题就是整数的划分,其实定义好了状态,就是简单的动态规划的递推。我们定义dp[n][k]表示将n进行划分,最大的数不超过k的方案有多少种,那么我们可以得到如下的递推方案:dp[n][k] = dp[n][k-1] + dp[n-k][k];其中的dp[n][k-1]便是将n进行进行整数的划分,最大的数不超过k-1的方案数;dp[n-k][k]表示拿出一个k后,剩下的数被不超过k的数的原创 2012-10-30 10:36:39 · 2275 阅读 · 0 评论 -
树状DP专辑(持续更新)
POJ 1655 Balancing Act 简单树状DPhttp://poj.org/problem?id=1655这道题目题意是说,任意删除树中的一个点,那么被分成几棵树之后,子树中点数最大的值就是该点的balance,求具有最小Balance的点。我们用num[i]表示以i为根节点的子树所包含的点的个数,那么该点的balance就是最大那个num[i]值了,比较简单,要是不会原创 2011-10-28 06:46:32 · 3601 阅读 · 0 评论 -
DP专辑 动态规划
HDU 2577 简单线性DPhttp://acm.hdu.edu.cn/showproblem.php?pid=2577这道题是简单的线性DP,状态很明确,就是当前的caps是on还是off的,因此我们定义dp[i][0]表示输入第i个字符的时候caps off,dp[i][1]表示输入第i个字符时caps on。定义好了状态之后,我们按照输入的习惯进行转移就行了,具体见代码。原创 2012-02-23 21:19:36 · 1001 阅读 · 0 评论 -
HDU 2159 FATE 背包问题
我们把忍耐度作为背包容量,把经验值作为价值,增加一维数量的限制,那么这道题就是典型的背包问题。我们定义dp[j][k]表示背包容量为j,选择k件物品所能达到的最大的价值。其实这是前面省略了一维的结果,我们可以更清晰的定义dp[i][j][k]表示前i中物品中,背包容量为j的背包选择k件物品所能达到的最大值,我们列开状态转移方程之后,发现可以省略前面一维保持答案的正确性,因此我们采用第一种定义来原创 2011-11-28 10:26:03 · 1075 阅读 · 3 评论 -
DP HDU 1494
这道题一看就是动态规划……首先确定如何定义状态,定义dp[i][j]表示跑完第i段路,保留j段能量的花费时间的最小值。那么我们的转移方程也比较好写,因为j最多可以到达14,所以第二维直接开到15就够了。状态转移还是看代码吧,细节小心就好了。#include #include #include #include #define INF (long long)0xFFFFF原创 2011-11-26 01:32:50 · 1196 阅读 · 0 评论 -
动态规划 POJ 1037 A decorative fence
这道题还是比较难想出来的,我也搞了好久才搞懂,而且是在问了大牛的基础上才搞清楚的。反而觉得黑书上没有讲清楚,现在我们来具体看看这道题的思路吧。 我们这样看一个符合条件的序列,例如一个长度为n的序列,当我们去定了前面的k项的时候,后面剩下的n-k项与1到n-k的符合条件的序列有一个一一对应的关系。这便是我们使用动态规划的动机,存在重叠子问题。于是我们如下定义状态:dp[i][j]原创 2011-11-04 15:58:44 · 3306 阅读 · 2 评论 -
简单概率DP(POJ 2151 Check the difficulty of problems)
这道题的大概意思就是说有n支队伍,t道题,并且给你每支队伍答对每道题的概率,然后问你的就是使所有队伍都过至少一道题,并且第一名的队伍答对至少m道题的概率是多少。 我们先看下如何解决一个队伍的情况,比如说,有t道题,那么我们如何求答对k(t>=k>=0)道题的概率呢?原创 2011-09-23 22:43:47 · 1047 阅读 · 0 评论 -
简单动态规划(POJ 1609 Tiling Up Blocks 解题报告)
一看这道题,感觉有点像今年多校的一道题,但是一看数据n的大小达到了10^4,那么如果建图跑的话要T,因为建图的复杂度差不多N^2的,于是不能用多校的那道题的做法。 我们看看给的l和r的数据范围比较小,1到100,那么我们使用一个dp数据记录dp[i][j]表示(i原创 2011-09-12 01:01:43 · 1465 阅读 · 0 评论 -
HDU 1257 最少拦截系统 LIS最长不减子序列
解题思路: 一开始没有想到是最大不减子序列,但是后来看了别人的解题报告并且自己分析了一下,真的就是最长不减子序列!用dp[i]表示第i个位置上的所需要的导弹系统数量!把它当做最简单的LIS做就ac了!后来我仔细考虑了一下,改了一下,结果却wa了!不知道怎么回事!还是以后再来再想想原创 2010-08-24 15:10:00 · 2971 阅读 · 4 评论 -
POJ 1837 Balance (动态规划)
这是一道典型的动态规划题,一开始很难想到怎样记录状态,但是我们发现要求的是平衡的种类数,因此我们可以想到的是dp数组保存的是平衡的时候的种类数。但是我们为了想到一个比较好的能够保存状态并且展现最终的种类数的记录状态的方式,于是我们尝试使用dp[i][j]表示使用了前i个物品后,使原创 2011-07-10 02:13:20 · 693 阅读 · 0 评论 -
POJ 1014 Dividing (动态规划、多重背包)
这是一道典型的多重背包问题。刚开始写的时候就是用最简单的多重背包的解法,也就是将多重背包转化成01背包来求解,结果T了很多次。后来转化成完全背包和01背包来求解,不过没有用log的算法进行优化,还是t。最后只好使用log的优化来优化转化为01背包的问题。知道了解法还是先说说思路吧原创 2011-07-10 18:55:37 · 1396 阅读 · 0 评论 -
POJ 1276 Cash Machine(动态规划、多重背包)
这道题是典型的多重背包题,就是说给你的物品有一个去的件数的上限,我们常用的解决多重背包问题的方法是:将件数乘以费用超过背包容量的物品可以使用完全背包的方法进行求解;除此之外的物品我们采用二进制的思想,将该物品的件数拆分成二进制上的数后,看成一个物品进行01背包。这样通过这两种方法原创 2011-07-10 20:40:03 · 1080 阅读 · 0 评论 -
POJ 2063 Investment (完全背包)
哈哈这道题T了好多次了,各种T!不过思路很明确,完全背包的求解,这道题最大的优化就是债券的价钱是1000的整数倍。我其实一开始就想到了用这个优化,但是题目中没有说明给的总的钱数也是1000的整数倍,所以交了几次都是直接T掉的。后来想了下,其实可以对钱和债券的价格都除以1000,这原创 2011-07-08 22:36:05 · 851 阅读 · 0 评论 -
dp related problems (update continuously)
dynamic programming related problems...原创 2014-10-07 19:49:35 · 1148 阅读 · 0 评论