分组背包
2017-08-22 20:22
134 查看
分组背包
题目描述
一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,…,Wn,它们的价值分别为C1,C2,…,Cn。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
输入
第1行:三个整数,V(背包容量,V<=200),N(物品数量,N<=30)和T(最大组号,T<=10);
第2..N+1行:每行三个整数Wi,Ci,P,表示每个物品的重量,价值,所属组号。
输出
仅一行,一个数,表示最大总价值。
样例输入
10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3
样例输出
20
解析:
分组背包就相当与把01背包倒了过来
01背包:
for i 物品的种类
for j 背包的大小(从大到小)
dp[j]=max(dp[j],dp[j-w[i]]+val[i]);
分组背包:
for i 组别
for j 背包的大小(从大到小)
for k 物品的种类
dp [j] = max ( dp [j] , dp [ j - w [i][k] ] + val [i][k] );
code:
题目描述
一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,…,Wn,它们的价值分别为C1,C2,…,Cn。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
输入
第1行:三个整数,V(背包容量,V<=200),N(物品数量,N<=30)和T(最大组号,T<=10);
第2..N+1行:每行三个整数Wi,Ci,P,表示每个物品的重量,价值,所属组号。
输出
仅一行,一个数,表示最大总价值。
样例输入
10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3
样例输出
20
解析:
分组背包就相当与把01背包倒了过来
01背包:
for i 物品的种类
for j 背包的大小(从大到小)
dp[j]=max(dp[j],dp[j-w[i]]+val[i]);
分组背包:
for i 组别
for j 背包的大小(从大到小)
for k 物品的种类
dp [j] = max ( dp [j] , dp [ j - w [i][k] ] + val [i][k] );
code:
#include<stdio.h> #include<string.h> #define max(h,r) h>r?h:r int main() { int a[11][20][1]; int dp[205]; int b[11]={1,1,1,1,1,1,1,1,1,1,1}; int v,n,t; memset(dp,0,sizeof(dp)); scanf("%d%d%d",&v,&n,&t); for(int i=1;i<=n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); a[z][b[z]][0]=x; a[z][b[z]][1]=y; b[z]++; } for(int i=1;i<=t;i++) for(int j=v;j>=0;j--) for(int k=1;k<b[i];k++) if(j>=a[i][k][0]) { dp[j]=max(dp[j],dp[j-a[i][k][0]]+a[i][k][1]); } printf("%d\n",dp[v]); return 0; }
相关文章推荐
- HDU3033 I love sneakers!(分组背包)
- NOIP 2006 金明的预算方案 (裸?)分组背包
- HDU 3033(分组背包)
- HDU 1712 分组背包
- D - Find Metal Mineral 树上的分组背包dp
- hdu 3535 AreYouBusy(各种分组背包)
- 关于分组背包
- HDU 1712 分组背包
- HDU1712简单的分组背包
- ACboy needs your help(分组背包)
- poj 1837 Balance 分组背包
- hdu 4003 Find Metal Mineral(树形DP+分组背包,每个物品必须只能选一次)
- hdu 6125 -- Free from square(状态压缩+分组背包)
- hdu 1712 ACboy needs your help(分组背包)
- 分组背包(每组至少选择一件物品)
- poj 1155 树形dp+分组背包
- HDU 3033 I love sneakers! (分组背包)
- zoj 3164 分组背包 + 各种背包
- POJ 1837 Balance / 分组背包
- hdu 5148 树形dp+分组背包问题