【动态规划】【RQ123】多人背包
2010-04-22 18:23
113 查看
题目描述
DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包。这些包的容量是相同的,都是V。可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值。
在 DD 看来,合理的背包安排方案是这样的:
每
个人背包里装的物品的总体积恰等于包的容量。
每个包里的每种物品最多只有一件,但两个不同的包中可以存在相同的物品。
任意两个人,他
们包里的物品清单不能完全相同。
在满足以上要求的前提下,所有包里的所有物品的总价值最大是多少呢?
输入格式
第一行有三个整数:K、V、N。(k<=50 v<=5000 n<=200 by RQ)第
二行开始的 N 行,每行有两个整数,分别代表这件物品的体积和价值。
输出格式
只需输出一个整数,即在满足以上要求的前提下所有物品的总价值的最大值。(最后有空行.)样例输入
#include<iostream> #define maxn 5000 using namespace std; long f[maxn+1][maxn+1]; int main(){ long k,v,n,i,j,u,a,b,list1[maxn+1],list2[maxn+1],p1,p2; cin>>k>>v>>n; for (i=0;i<v;++i) for (j=0;j<=k;++j) f[i][j]=-99999999; f[0][1]=0; for (i=1;i<=n;++i){ cin>>a>>b; for (j=v;j>=a;--j) if (f[j-a][1]>=0){ p1=1,p2=1; for (u=1;u<=k;++u){ list1[u]=f[j-a][u]+b; list2[u]=f[j][u]; if (list2[p2]>=list1[p1]) f[j][u]=list2[p2++]; else f[j][u]=list1[p1++]; } } } long ans=0; for (i=1;i<=k;++i) ans+=f[v][i]; cout<<ans<<endl; return 0; }
相关文章推荐
- 动态规划之0-1背包问题
- 动态规划 0/1 背包问题, 最短路径问题
- 01背包问题-动态规划
- 0-1背包问题与完全背包问题C++实现 动态规划
- 动态规划 0-1背包问题
- 动态规划 背包九讲的实现。
- 动态规划之背包问题(一)
- 复试训练——动态规划——背包
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)
- 【SeedCoder2015年热身题3 动态规划】0-1背包 (题目+答案)
- 动态规划之背包问题(一)
- 动态规划——背包问题笔记
- 【动态规划】最少硬币换取目标钱数【0-1背包问题】
- 动态规划求解0-1背包
- hiho 完全背包(动态规划)
- 【数据结构_动态规划_背包问题_0963】小偷的背包
- HDU 1114 Piggy-Bank 动态规划完全背包
- 0-1背包问题,动态规划
- 算法导论--动态规划(0-1背包问题)
- 动态规划求解背包问题(JAVA实现)