动态规划-背包问题
文章平均质量分 78
iHge2k
专注数据结构和算法
展开
-
hdu 3732(01背包转多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包。。最多也就11*11=121件物品。。。 View Code 1 #include 2 using namespace std; 3 int dp[10010]; 4 int map[14][14];原创 2014-05-26 17:55:33 · 384 阅读 · 0 评论 -
hdu 1114(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 思路:在背包九讲中有提到,如果是要恰好装满,那么这儿dp[]的初始化时应将dp[0]=0,由于这儿是求最小值,故应将dp[1]-dp[n]置为正无穷;若是求最大值,则置为负无穷; View Code 1 #include 2 const int N=550; 3 const原创 2014-05-26 17:53:01 · 394 阅读 · 0 评论 -
hdu 3339(01背包+最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3339 大致题意是说:有n个电站,每个电站都有一定的电量,电站之间有一定距离,我们要从0点出发去占领一些电站,使得占领的电站电量之和超过总电量的一半,求达到条件所要走的最短距离。如果可能的话,输出距离,否则输出不可能。 思路:我们从0点开始派出一些tank去占领一些电站,坦克到每个电站都有一定距离,原创 2014-05-26 17:52:16 · 498 阅读 · 0 评论 -
hdu 2159(二维完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:dp[j][l]表示消耗了j忍耐度,杀了l个怪后获得的经验值;最后只要对dp扫一遍,找出是否有大于等于n的值,如果有,这保留此时的消耗的忍耐值;否则,输出-1; View Code 1 #include 2 const int N=110; 3 using names原创 2014-05-26 17:52:46 · 359 阅读 · 0 评论 -
hdu 2844(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:其实就是多重背包的应用,只是这里价值和重量是相等的,因此最后计数是要计价值和重量相等的个数; View Code 1 #include 2 #include 3 const int N=100010; 4 using namespace std; 5 int原创 2014-05-26 17:52:48 · 364 阅读 · 0 评论 -
hdu 2191(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 这完全就是多重背包的应用啊,刚看了背包九讲。。。orz,直接按着上面的伪代码敲的。。。 View Code 1 #include 2 const int N=110; 3 using namespace std; 4 int n,m; 5 6 struct R原创 2014-05-26 17:52:59 · 309 阅读 · 0 评论 -
hdu 4501(背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4501 思路:dp[l][i][j][p]表示选前l件时花费i元,积分j,免费p时最大价值 View Code 1 #include 2 #include 3 #include 4 const int N=104; 5 using namespace std; 6原创 2014-05-26 17:53:41 · 392 阅读 · 0 评论 -
hdu 4504(背包最优方案数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4504 View Code 1 /* 2 #include 3 #include 4 using namespace std; 5 int _count=0; 6 7 void dfs(int a,int b,int count){ 8 if(count原创 2014-05-26 17:53:43 · 406 阅读 · 0 评论 -
hdu 4508(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4508 一开始还以为是一个01背包呢。。。看了第二组测试数据之后就发现是完全背包了。。。 View Code 1 #include 2 const int N=110; 3 using namespace std; 4 int dp[N*N*10]; 5 struct No原创 2014-05-26 17:53:47 · 358 阅读 · 0 评论 -
hdu 1712(分组背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 思路:这是一道简单的分组背包,因为每种课可以有多种选择:花几天时间在该课上。一旦作出选择,就不能再选该课,就相当于有多组物品,每组内的物品互相冲突,最多只能选一件。 伪码: for 所有的组k for v=V..0 for 所有的i属于组k原创 2014-05-26 17:55:14 · 308 阅读 · 0 评论 -
hdu 1864(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 大意:对于每张发票,要么报销,要么不报销,0-1背包,张数即为背包;转移方程:f[j]=max(f[j],f[j-1]+v[i]); 一开始边界没考虑,导致输出结果为0.00; View Code 1 #include 2 #include 3 #include 4原创 2014-05-26 17:52:25 · 288 阅读 · 0 评论