【动态规划】
文章平均质量分 66
x314542916
不怕比我聪明的人,只怕比我聪明但比我还要努力的人
展开
-
【解题报告】NYOJ 119 士兵杀敌(三)--RMQ算法详解
RMQ问题题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119------ 士兵杀敌(三)大意就是,有一个数列 {a1,a2,a3,a4,a5,a6,a7.......an} ,在其中连续的区间内,算出该区间内最大最小值的差。示范数据:9 2 5 1 10 7 3 21 8 15 4 22 19 6[原创 2012-08-01 16:37:22 · 1813 阅读 · 10 评论 -
HDU 1520 Anniversary party -- 树形dp 好题目
/* http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party 比较典型的树形dp,好题目!!! 给一棵树,要求取某一个节点(每一个点有权值)时不能取对应的父节点和子节点,问满足条件的方案权值最大为多少。 定义状态dp[i][0]表示不取i节点时的最大权值,dp[i][1]表示取i节点时的最大权值。 所以 dp[f原创 2013-04-10 19:35:46 · 690 阅读 · 0 评论 -
HDU 1712 ACboy needs your helpss - 分组背包+最多那一个
/* http://acm.hdu.edu.cn/showproblem.php?pid=1712 ACboy needs your helpss 分组背包 每组最多拿一个 ,一定要注意初始化,当前需要循环的初始化为上一次的结果,才能保证全局最优解 这题目卡cin,数据太多了,让我超时了一次 另外这题目还有一个办法,改变循环顺序也可使得每组至多拿一个物品*/#include原创 2013-03-27 21:29:00 · 544 阅读 · 0 评论 -
【解题报告】NYOJ 679 贪婪的商店 -- 树形dp 裸的很
/* http://acm.nyist.net/JudgeOnline/problem.php?pid=679 贪婪的商店 最短路 或者 树形dp 很裸的树形dp,要买一件东西,需要再买某些物品,问最少需要花多少钱才能买到那件东西*/#include #include #include #include #include #include #include原创 2013-04-23 22:42:15 · 856 阅读 · 0 评论 -
POJ 1036 Gangsters -- 常规dp 题意好难懂啊
/* http://poj.org/problem?id=1036 Gangsters翻译: N 个盗贼去一个饭店,第i个盗贼在Ti时间来,他拥有Pi的财富。这个饭店的门有K+1种开放的状态,用[0,K]表示。这些状态能够被一个盗贼改变在一个时间单位内,要么把它打开,要么把它关闭,或者就是维持原状。在初始时刻这些门都是关闭着的。第i个盗贼进入了饭店仅当这个门是专门为他所开放的时原创 2013-04-29 23:24:09 · 938 阅读 · 0 评论 -
【转】经典动态规划题集
1014* Dividing 半个背包,注意中断1036 Gangsters1038* Bugs Integrated, Inc. 状态压缩1050 To the Max 最大子矩形1080 Human Gene Functions1088 滑雪1141* Brackets Sequence 括号序列1157 LITTLE SHOP OF F转载 2013-04-29 15:31:49 · 1012 阅读 · 0 评论 -
NYOJ 674 善良的国王 -- 树形dp
/* http://acm.nyist.net/JudgeOnline/problem.php?pid=674 善良的国王 题意:有一棵树希望留下m个节点,问最少需要删除几条边 思路:树形dp 状态 dp[i][j] : 在以i节点为根的树(单独考虑这个树)下,留下 j 个点(包括i)最少需要删除几条边 初始化 dp[i][1] : 在 i 节点下,只留下1个点,则最少要删原创 2013-05-02 13:22:55 · 768 阅读 · 0 评论 -
NYOJ 61 传纸条 && NYOJ 712 探寻宝藏 -- 双线dp
/* http://acm.nyist.net/JudgeOnline/problem.php?pid=61 传纸条 http://acm.nyist.net/JudgeOnline/problem.php?pid=712 探 寻 宝 藏 题意:给一个矩阵,求两条不相交的线从左上角到右下角经过的元素的最大和 双线dp - 即同时考虑两条不相交的线,使其线上的和最原创 2013-05-15 21:56:39 · 1434 阅读 · 0 评论 -
NYOJ 304 节能 -- 区间dp
/* http://acm.nyist.net/JudgeOnline/problem.php?pid=304 节能 一个区间里面有很多不重复的灯,机器人从其中一个灯开始关灯。 给出灯和原点的距离 和 灯的功率,问机器人从开始关灯到关灯结束总共浪费的电能 机器人每秒移动一米。 因为各个灯消耗的电能不一样,所以机器人的关灯的选择有一定策略 思路 区间dp dp[i][j][0]原创 2013-05-05 11:37:50 · 1264 阅读 · 0 评论 -
POJ 1080 Human Gene Functions -- dp最长公共子序列 (变体)
/* http://poj.org/problem?id=1080 Human Gene Functions 最长公共子序列 (变体) dp[i][j]: x串为i长度 y串为j长度 的最大匹配值*/#include #include #include #include #include #include #include #define CLR(c,v) (memse原创 2013-05-05 11:50:34 · 732 阅读 · 0 评论 -
CodeForce 280C Game on Tree -- 树形dp求期望
http://codeforces.com/problemset/problem/280/C/* codeforce game of tree 给你一棵树,你可以随机选择一个点,然后将这个点及其子树全部删去 问删去操作的期望数 将每个点的深度分之一 相加为结果*/#include #include #include #include #define CLR(c,v) (me原创 2013-05-06 23:50:56 · 859 阅读 · 0 评论 -
POJ 3311 Hie with the Pie -- TSP 状态压缩dp
/* http://poj.org/problem?id=3311 Hie with the Pie 旅行商问题,状态压缩的dp*/#include #include #include #include #include #include using namespace std;#define CLR(c,v) memset(c,v,sizeof(c))template原创 2013-05-06 23:08:42 · 769 阅读 · 0 评论 -
xjoj146 快速刷屏 -- 简单dp 居然没想到dp打表
主要是看到题目中说的字符串最多1w个,如果打表暴力的话应该是1w*5k的复杂度,就没继续下去了,结束之后发现的确是这个思路。。。。好囧啊,希望以后不要这样子了。/*http://202.117.21.117/xjoj/problem_html/146.html 快速刷屏dp[i] : 长度为i最短需要多少时间dp[i] = min(dp[i-1] + 1 , dp[j] + time*2原创 2013-05-09 23:23:52 · 1186 阅读 · 0 评论 -
【解题报告】 ZOJ 3640 Help Me Escape - 期望dp
#include #include #include #include #include #include #include #include #include #define CLR(c,v) memset(c,v,sizeof(c))using namespace std;const int N = 2e4 + 5;const int INF = (1<<30);原创 2013-07-23 23:33:39 · 1774 阅读 · 0 评论 -
【解题报告】HDU 4616 Game - 树形dp
/* dp[node][i][0]: node节点 在 消耗i陷阱时 并从该节点往下走(或者理解为还有能力往下走)的最大权值 dp[node][i][1]: node节点 在 消耗i陷阱时 并从子节点往上走(到该节点或者理解为没有能力接着走了)的最大权值*/#pragma comment(linker,"/STACK:102400000,102400000")#incl原创 2013-07-29 11:05:12 · 1718 阅读 · 0 评论 -
【解题报告】HDU 4679 Terrorist’s destroy -- 树形dp 删一边求两子树直径
/* HDU 4679 Terrorist’s destroy 给一棵树,任意删一条边,树分成了两个部分(a,b),求min( max(a.直径,b.直径) * v.w ) 最大直径乘以边权 积的最小值 解法: 先找出整棵树的直径所在,即两个端点ds de 然后保存每个点到ds和de之间的距离 dds[] dde[] 然后从ds(de)开始搜 每个点保存子树中到de(ds)之原创 2013-08-19 14:36:21 · 1250 阅读 · 0 评论 -
HDU 3033 I love sneakers! -- 分组背包 每组最少拿一个
/* http://acm.hdu.edu.cn/showproblem.php?pid=3033 I love sneakers! 分组背包 每组最少拿一个 注意初始化 和 每组物品必须同时处理*/#include #include #include #include #define CLR(c,v) (memset(c,v,sizeof(c)))using name原创 2013-03-27 11:37:54 · 785 阅读 · 0 评论 -
HDU 3496 Watch The Movie -- 二维费用背包 费用刚好完全消耗
/* http://acm.hdu.edu.cn/showproblem.php?pid=3496 Watch The Movie 二维费用的背包 其中第二费用为隐藏条件 恰好第二费用刚好完全消耗,注意初始化。别太粗心了*/#include #include #include #include #define CLR(c,v) (memset(c,v,sizeof(c)))u原创 2013-03-26 21:19:56 · 657 阅读 · 0 评论 -
NYOJ 654 喜欢玩warcraft的ltl -- 01背包 一中常数优化
一个常数优化前面的伪代码中有for v=V..1,可以将这个循环的下限进行改进。由于只需要最后dp[v]的值,倒推前一个物品,其实只要知道dp[v-w[n]]即可。以此类推,对以第j个背包,其实只需要知道sumc[i->n](第i物品到最后一个物品的消耗和,因为前面的对结果没有影响)即可,即代码中的1 for i -> 1 to N2 do for v -> V to 03原创 2013-03-28 21:32:13 · 1270 阅读 · 0 评论 -
HDU 3001 - Travelling TSP
http://acm.hdu.edu.cn/showproblem.php?pid=3001#include #include #include #include #include #include using namespace std;template _T Max(_T a , _T b){ return (a>b)?(a):(b);}template _T Max原创 2013-04-01 21:48:07 · 718 阅读 · 0 评论 -
HDU 2844 Coins -- 多重背包
#include #include #include #include #include using namespace std;#define CLR(c,v) (memset(c,v,sizeof(c)))const int INF = 1<<30;const int inf = -(1<<30);const int M = 1e5 + 10;int dp[M];原创 2013-03-25 21:26:19 · 607 阅读 · 0 评论 -
1114 Piggy-Bank - 完全背包 恰好达到状态最小价值
http://acm.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank#include #include #include #include #include #include using namespace std;#define CLR(c,v) (memset(c,v,sizeof(c)))template _T Max(_T原创 2013-04-03 09:40:44 · 664 阅读 · 0 评论 -
HDU 3535 AreYouBusy -- 分了组的混合背包
混合背包,还分组了 ,三种类型的set 最多取一个,最少取一个和没有限制/* http://acm.hdu.edu.cn/showproblem.php?pid=3535 AreYouBusy 混合背包,还分组了 ,三种类型的set 最多取一个,最少取一个和没有限制*/#include #include #include #include #define CLR(c,v) (m原创 2013-03-26 18:56:23 · 740 阅读 · 0 评论 -
HDU 1561 The more, The Better - 依赖背包+树形dp基础
/* http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better 依赖背包 -> 树形dp题意: 给一个树形结构,问最多拿max个城市 ,能获得的最大价值多少,拿下面的一定要先拿上面的。解题思路:定义状态dp[i][j] : 当前i节点及其子树下最多选择j个城市的最大值为dp[i][j];我们考虑到特殊状态:i原创 2013-04-08 08:03:27 · 3562 阅读 · 0 评论 -
HDU 1087 Super Jumping! Jumping! Jumping! -- 简单动态规划
/* http://acm.hdu.edu.cn/showproblem.php?pid=1087 HDU 1087 Super Jumping! Jumping! Jumping!状态转移方程为:sum[i] = { max(sum[j] + num[i]) , 1 <= j < i } ;*/#include #include #include #incl原创 2013-03-25 11:43:23 · 572 阅读 · 0 评论 -
NYOJ 104 矩阵最大和 - 简单动态规划
//http://acm.nyist.net/JudgeOnline/problem.php?pid=104#include #include #include #include #include using namespace std;#define COL nn#define ROW nconst int M = 1e2 +10;const int inf = -(1<<3原创 2013-04-08 08:01:10 · 775 阅读 · 0 评论 -
HDU 4501 小明系列故事——买年货 -- 分组背包变体
/* http://acm.hdu.edu.cn/showproblem.php?pid=4501 小明系列故事——买年货 题意:一个现金,一个优惠积分,都可以购买东西,并且只需要其中一个满足物品的消耗即可购买 另外可以免费挑选1-5个商品赠送 求最大的收益价值 每种物品给出三个消费(现金消耗,积分消耗,免费权消耗),但是这三个消费并不是同时需要满足, 所以我们可以将这个问题转化为一个原创 2013-04-09 08:25:37 · 1090 阅读 · 0 评论 -
HDU 1003 Max Sum - 简单动态规划
/* http://acm.hdu.edu.cn/showproblem.php?pid=1003 最大字段和,并输出区间,再弄一个数组保存每一个sum的区间, input 5 6 -1 5 4 -7 sum 6 5 10 14 7 [0,0][0,1][0,2][0,3][0,4] 遍历的时候取到最大和的时候原创 2013-03-25 10:18:42 · 600 阅读 · 0 评论 -
Hdu 1059 Dividing -- 多重背包
/* http://acm.hdu.edu.cn/showproblem.php?pid=1059 Dividing 多重背包, 六种质量(1,2,3,4,5,6)的大理石,每种n[i]长,是否能分割为等质量的两份大理石,因为格式问题纠结死了*/#include #include #include #include #define CLR(c,v) (memset(c,v,si原创 2013-03-26 09:12:34 · 532 阅读 · 0 评论 -
Consumer -- 依赖背包
http://acm.hdu.edu.cn/showproblem.php?pid=3449 Consumer#include #include #include #include #include #include using namespace std;#define CLR(c,v) (memset(c,v,sizeof(c)))template _T Max(_T a原创 2013-04-03 09:13:31 · 667 阅读 · 0 评论 -
HDU Big Event in HDU - 多重背包
/* http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU 题意 多重背包 将器材分成两份,尽量平均*/#include #include #include #include #define CLR(c,v) (memset(c,v,sizeof(c)))using namespace std;con原创 2013-03-26 10:04:30 · 704 阅读 · 0 评论 -
HDU 3236 Gift Hunting - 分组背包 相当于两个01背包
/* http://acm.hdu.edu.cn/showproblem.php?pid=3236 Gift Hunting 题意:某人有两张卡,卡上的钱不能合并消费,买东西的时候物品有两个属性,一个是必须买的(即girlfriend need) 还有一个不是必须买的,同一样物品用不同的卡消费相同并且只能购买一次,我们需要最大的价值(即happy值). 思路: 分组背包,现将必买的东原创 2013-04-09 18:17:31 · 1159 阅读 · 0 评论 -
HDU 1011 Starship Troopers - 01树形dp 有坑啊!!
/* http://acm.hdu.edu.cn/showproblem.php?pid=1011 Starship Troopers 01树形dp 题意:多个舰队,攻打bug的洞穴,每一个洞穴里面有很多bug和一些brain,我们需要派一个舰队去获得更多的brain 这个过程我们遵循:洞穴为一个树形结构(没有环),洞穴的入口为1(root节点),如果洞穴i在洞穴j的前面, 则必须先进攻原创 2013-04-09 18:19:56 · 698 阅读 · 0 评论 -
HDU 4359 Easy tree DP? -- 我只能说是个dp
/* HDU 4359 Easy tree DP? 题意:求任意节点下左子树最大值小于右子树最大值的二叉树方案数 我只能说这是一个dp(rt) 状态:i个节点在满足不大于j深度有 dp[i][j] 种方案数 初始化: CLR(dp,0) dp[1][1~360] = 1 各种深度仅一个节点方案数为1 转移: (1)i个中挑一个为root 并原创 2013-10-12 09:57:48 · 909 阅读 · 0 评论