摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535一道需要深刻理解状态转移的背包题:dp[i][j],表示第i组,时间剩余为j时的快乐值。每得到一组工作就进行一次DP,所以dp[i]为第i组的结果。1、至少选一项,即必须要选,那么在开始时,对于这一组的dp的初值,应该全部赋为负无穷,这样才能保证不会出现都不选的情况。状态转移方程为dp[i][k]=max{ dp[i][k],dp[i-1][k-cost[j]]+val[j],dp[i][k-cost[j]]+val[j] }。dp[i][k]是不选择当前工作;dp[i-1][k-cost[j 阅读全文
posted @ 2013-05-21 22:52 ihge2k 阅读(184) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://acm.cug.edu.cn/JudgeOnline/problem.php?id=1317思路:dp[i][j]表示以a[i]为结尾的串与以b[j]为结尾的串的最小编辑距离,则若a[i]==a[j],有dp[i][j]==dp[i-1][j-1];否则dp[i][j]=min{dp[i-1][j-1]+2,dp[i-1][j]+3,dp[i][j-1]+3} 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 # 阅读全文
posted @ 2013-05-21 22:36 ihge2k 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4526思路:dp[i][j]表示前i辆车送走j个acmer的最小花费,然后就有dp[i][j]=dp[i-1][j-k]+k*t+d;(t为车辆到达的时间,d为花费),值得注意的地方是dp[0][0]=0,而其余都应该初始化为inf. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 #define 阅读全文
posted @ 2013-05-21 17:20 ihge2k 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acdreamoj.sinaapp.com/problem.php?id=1083没什么好说的,具体看代码吧。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 int dp[11][4];//0没有3和8,1只有3,2只有8,3有3和8 7 int digit[11]; 8 9 int dfs(int pos,int have,int doing){10 if(pos 阅读全文
posted @ 2013-05-21 10:10 ihge2k 阅读(700) 评论(0) 推荐(0) 编辑