dp
文章平均质量分 81
AndyZhang
一些当前好走的路会越走越窄,而一些当前艰难的路却会越走越宽广。
展开
-
poj2385-dp经典
这道题目虽然不难,但是还是算很经典的动态规划题目了。 题意很简单,两颗苹果树每一分会有树落下苹果,有人去接,但是来回两个树之间的次数是一定的,所以求出在最大次数时最多能接到多少苹果。 状态方程一开始是想对了,但是还是有些细节没有注意啊。 比如:开始的时候在tree1下面,这样如果给出显示第2颗树落下苹果的话,初始化代码就得改变,所以分两种情况。 另外就是dp状态方程dp[i][j]原创 2012-04-02 10:37:29 · 5418 阅读 · 1 评论 -
整数分解为2的幂-清华复试上机题
题目: 任何数都能分解成2的幂,给定整数n,求n的此类划分方法的数量! 比如n = 7时。 7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4 共有6种划分方法。 解法: 来自:http://www.cnblogs.com/skyiv/archiv原创 2013-11-30 00:13:07 · 5958 阅读 · 1 评论 -
最大全1子矩阵
题目描述: 给出1个M*N的矩阵M1,里面的元素只有0或1,找出M1的一个子矩阵M2,M2中的元素只有1,并且M2的面积是最大的。输出M2的面积。 Input 第1行:2个数m,n中间用空格分隔(2 <= m,n <= 100) 第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。 Output 输出最大全是1的子矩阵的面积。 Input 示例 3 3原创 2013-10-22 00:23:40 · 6545 阅读 · 0 评论 -
幸运号码-dp
题目: 时间限制:1 秒 空间限制:65536 KB 分值: 20 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码。 例如:99、1230、123312是幸运号码。 给出一个N,求长度为2N的幸运号码的数量。由于数量很大,输出数量 Mod 10^9 + 7的结果即可。 Input 输入N(1 Output 输出幸运号码的数量 Mo原创 2013-09-29 01:15:35 · 2026 阅读 · 0 评论 -
动态规划解最长公共子序列问题
动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。 为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。 【问题】 求两字符序列的最长公共字符子序列 问题描述转载 2013-08-04 01:32:52 · 783 阅读 · 0 评论 -
poj1661-这题目简单dp但是要考虑情况比较多,wa了n次死在了自己定义的无穷大上面
题目大意: 这个是中文的,就不用解释了,有个游戏叫是男人就下100层,就是这个游戏哈。。。 算法分析: 仔细分析发现,其实就是从第一个点开始,由于题目说肯定有解,不会摔死,所以要么向左走,要么向右走,其中至少一个有解。 到下一层,同样要么左走要么右走,其实就是两种状态。那么我们每次只需要求这两种状态的最小值既可。 状态方程: 对于每一层的两个点, edge[i].min1 = Min原创 2012-11-18 00:00:54 · 1311 阅读 · 0 评论 -
poj1036-题目好难理解,理解了就变得简单了许多dp
一开始,不理解题目意思,都不知道样例是如何计算出来的。 看到discuss中有人说了题目的意思是:有个伸缩门,门的宽度0~K,每个时间可以伸长或缩短1个单位,有N个流氓,他们在T时刻到达,如果这时门的宽度正好与他们的stoutness相等时,便可获得一定的收入,问最大的收入是多少。 看不到题目说什么伸缩门,不知道这是什么翻译,但是总算理解题目意思了,其实就是个背包。就是在第i个流氓能进的原创 2012-11-17 19:10:11 · 2062 阅读 · 0 评论 -
poj1384-完全背包
具体可以到到网上搜索一下背包九讲,各种类型的背包,不过基础还是01背包。 #include #include #include #define Min(a,b) (a<b?a:b) #define Max(a,b) (a>b?a:b) #define inf 0x0FFFFFFF #define nMax 510 int E,F,N; int price[nMax],原创 2012-11-01 23:46:16 · 1131 阅读 · 0 评论 -
poj3628-DFS/0-1背包-DP/枚举-数据比较弱、方法比较多
因为数据范围20,所以直接枚举是2^20,不会超时。直接求组合就行。在N个数里面取1个数,2个数。。。。N个数,求出一个最小差值就可以了。 下面是组合的算法--175MS #include #include #include #include #define nMax 25 int N,B; int height[nMax]; int ans; int get原创 2012-10-31 23:58:20 · 1524 阅读 · 0 评论 -
poj1463-1A
题目大意,有一些节点,节点间有路,节点上放哨兵可以监视和此节点直接连接的节点。求用最少的哨兵,监视所有的节点,没有盲区。。。。 其实一看就知道是一个dp,01背包。每个节点上只有两种情况,放或者不放,按平时来说就是简单的dp,但是这次是一个树,所以要在树上做01背包。 状态方程很好想: dp【i】【0】表示第i点不放哨兵 dp【i】【1】表示第i点放哨兵 那么我们知道: d原创 2012-08-18 02:00:43 · 1653 阅读 · 0 评论 -
poj1947-第一道树形dp,哎,欲哭无泪
第一道树形dp,欲哭无泪。 不知道如何说,首先对树学习的不深,大学上课的时候这些东西考试内容很固定,学的时候又有点吃力,所以学的不是很深。其次对于dp,其实也就是计算里面的迭代,但是这个方面确实博大精深,我曾经也是浅尝则止,导致此题感觉越发困难。最后递归,这是我学习过程中,认为最不好理解的一个算法,很难想象,但是递归之美不是让你去想象,而是去分析,如何才能递归。。。 然而这道题目,这三原创 2012-08-15 23:05:00 · 2824 阅读 · 2 评论 -
动态规划(dp)简介
动态规划(dp) 简介 作为算法设计者和程序员,我们经常需要编程寻找一些问题的最优解。通常很容易得到优秀而可行的解,但要保证程序总是返回绝对意义下的最优解,往往需要对问题进行深入的分析和思考。 动态规划是求解最优化问题的一个非常强大、通用的工具。它对于字符串这样“从左到右排列好”的元素序列尤其有效。一旦学透,动态规划是很好用的,但是很多人在尝试理解它时遇到了重重困难。原创 2011-12-10 11:02:09 · 1488 阅读 · 0 评论 -
poj3670
/* * poj3670.cpp * * Created on: 2010-8-18 * Author: friendy *//* 先回顾经典的O(n^2)的动态规划算法: 设 A[i]表示序列中的第i个数,F[i]表示从1到i这一段中以i结尾的最长上升子序列的长度,初始时设F[i] = 0(i = 1, 2, ..., len(A))。 则有动态规划方程:F[i] = max{1, F[j]原创 2010-08-18 20:20:00 · 1238 阅读 · 0 评论 -
poj1185兴趣还是要坚持滴。。
不知道什么时候,丢掉了我很感兴趣的算法,也不在更新博客了。但是这段时间,总感觉生活中少了些什么,常常感觉不太习惯,原来我把学习算法和写博客冷落了好几个月了。好习惯就要一直坚持下去,也希望大家坚持自己认为正确的习惯。这样活着才有意思哈。 /**************************************************** * 这道题目一看就是动态规划,但是就是不知道如原创 2012-03-12 23:58:10 · 1357 阅读 · 0 评论 -
整数划分问题
整数划分问题 数 n 的划分是将 n 表示成多个正整数之和的形式 划分可以分为两种情况: A 划分的多个正整数中,正整数的数量是任意的 这又可以分为划分的正整数中,正整数可以相同与不同两类 1. 划分的多个正整数可以相同, 递推方程可以表示为: (1) dp[n][m]= dp[n][m-1]+ dp[n-m][m]转载 2014-05-23 12:46:38 · 1326 阅读 · 0 评论