洛谷——P1757 通天之分组背包
P1757 通天之分组背包
题目背景
直达通天路·小A历险记第二篇
题目描述
自01背包问世之后,小A对此深感兴趣。一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。
输入输出格式
输入格式:
两个数m,n,表示一共有n件物品,总重量为m
接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数
输出格式:
一个数,最大的利用价值
输入输出样例
说明
1<=m<=1000 1<=n<=1000 组数t<=100
分组背包板子
#include<bits/stdc++.h> using namespace std; int n,m,tot,f[1005]; struct Node{ int w[105],v[105],tot; }a[125]; int main() { cin>>m>>n; for(int i=1;i<=n;i++){ int x,y,z; cin>>x>>y>>z; a[z].w[++a[z].tot]=x;a[z].v[a[z].tot]=y; tot=max(tot,z); }memset(f,0,sizeof(f)); for(int i=1;i<=tot;i++){ for(int j=m;j>=0;j--){ for(int q=1;q<=a[i].tot;q++){ if(j>=a[i].w[q]) f[j]=max(f[j-a[i].w[q]]+a[i].v[q],f[j]); } } } cout<<f[m]; return 0; }
背包学习
博主蒟蒻,若有出错的地方,敬请指出。
如有侵犯您版权的地方,请快速联系我,我会撤回本博文。