
DP
文章平均质量分 51
jason_star
我要变强!
展开
-
【sdut】1309 不老的传说问题(简单环形区间DP)
题目大意:中文题就不赘述了。题目链接 题目思路:大致的处理是与HDU 2476 一个道理,只是加入环形的处理方式。 环形处理方法:将数组延长一倍。 AC代码: #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int a[440]; int dp[440][440原创 2015-01-29 17:30:25 · 819 阅读 · 0 评论 -
【HDU 2476】String Painter(区间DP)
题目大意: 有两个长度不超过100的字符串,A,B,要把A变成B,现在可以连续将N个变成相同的字母,问你至少要变多少次。(N为无限) 题目思路:只要该位置不与B的该位置相同,那么就等同于空白,假如相同就可以不画。所以一开始先做一次区间DP,算出从空白画出B的最少次数 关键代码为: for (int l = 1; l for (int i = 1; i + l {原创 2015-01-29 17:04:51 · 706 阅读 · 1 评论 -
【HDU 1081】To The Max(求子矩阵元素和)
题目应该很容易看懂,是为了求一个矩阵之内最大的一个子矩阵的和。 子矩阵的和表示的是该矩阵内所有元素的和。 方法引入: 首先当然十分容易的可以想到一维求子段的和。 假设数组为a[110]; int sum = 0, MAX = 0,n; for (int i = 0; i < n; i++) { if (sum < 0) sum = 0; sum += a[i]; if (sum原创 2014-12-06 23:55:42 · 1444 阅读 · 0 评论 -
【hdu 1059】Dividing
将6种价值不同,数量不同的石头,分成两组价值相同,问能否可分。 很容易想到是多重背包。 但是以哪个为容量是关键,我是以价值为容量,超时了。 不过这边有一个可以优化的地方。 for(int i=1;i<=6;i++) { num[i]=(num[i]*i)%60/i; sumvalue+=num[i]*i; }原创 2014-12-07 20:10:26 · 619 阅读 · 0 评论 -
【HDU 1158】 Employment Plannin
题目大意:你可以雇佣,开除雇员,当然你得支付给任何一个在职雇员薪水,就算他不工作。请告诉我要完成工作,最少的花费是多少。 #include using namespace std; int dp[15][1100]; int a[13]; int main() { int n; int hire,cost,fire; while(cin>>n,n) { cin>>hire>>原创 2014-12-07 18:35:43 · 636 阅读 · 0 评论 -
【hdu 1300】pearl(需要深刻理解dp,同龟兔赛跑)
(转载)题目意思是说,有几种不同的珍珠。每种珍珠都有它的单价。当然质量高的珍珠价格一定也是高的。 为了避免买家只买1个珍珠。就要求不论是买了多少个珍珠都是需要在购买数量上加10.之后乘上单价。 求出总的花费!例如:买5个单价是10的珍珠。需要的花费是(5+10)*10= 150.买100个单价是20的珍珠 需要的花费是(100+10)*20= 2200.总共需要的花费是150+220原创 2014-12-09 22:55:47 · 643 阅读 · 0 评论 -
【hdu 1501】Zipper(最优子结构)
DP解法: 最优子结构分析:如上例,如果A、B可以组成C,那么,C最后一个字母e,必定是 A 或 C 的最后一个字母组成。 C去除除最后一位,就变成是否可以求出 A-1和B 或者 A与B-1 与 是否可以构成 C-1。。。 状态转移方程: 用f[i][j] 表示 表示A前 i 为 和B 前j 位是否可以组成 C的前i+j位转载 2014-12-10 00:42:49 · 912 阅读 · 0 评论 -
【Coder Force】264C - Choosing Balls (DP高难度思维转换)
卡了2天,说多了都是泪。/* 该点的最大值的可以由前面某个点加上相应的值得到。 而前面的点可以分析为以下的条件 1、前面的这个点与该点颜色相同。 2、这个点与这个点颜色不同。 3、前面没有点。 现在分析: 由于1、3两个条件已经是o(1)的时间,所以不需要优化。 主要的时间出在于2的时间,2需要遍历。 假设2里面有n个条件需要判断,其实归结起来,我们只需要判断两个情况 1、这个点的颜色与该点相同 2原创 2015-02-09 11:13:50 · 785 阅读 · 0 评论 -
【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
题目大意:一组数按照顺时针排列,数值相同的两个位置可以连一条线,最终线与线不交叉的最大数量为多少。 这道题目是求最大匹配的题目,初学区间DP,脑子一片空白,仅仅记下来,以供之后温习。 按照区间的想法可以很容易的得到,dp[i][j]所存的是i到j当中满足条件的最大数值,那么有dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]); 这个是解决在i到j区间当中有两原创 2015-01-25 12:08:49 · 874 阅读 · 0 评论