首页 > 代码库 > 洛谷——P1757 通天之分组背包
洛谷——P1757 通天之分组背包
https://www.luogu.org/problem/show?pid=1757#sub
题目背景
直达通天路·小A历险记第二篇
题目描述
自01背包问世之后,小A对此深感兴趣。一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。
输入输出格式
输入格式:
两个数m,n,表示一共有n件物品,总重量为m
接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数
输出格式:
一个数,最大的利用价值
输入输出样例
输入样例#1:
input: 45 4 10 10 1 10 5 1 5 20 2 50 400 2
输出样例#1:
output:30
说明
1<=m<=1000 1<=n<=1000 组数t<=100
裸地分组背包
1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 int m,n,x,y,num,max_num; 7 int a[10005],w[1015][1015],val[1015][1015]; 8 int f[10105]; 9 10 int main()11 {12 scanf("%d%d",&m,&n);13 for(int i=1;i<=n;i++)14 {15 scanf("%d%d%d",&x,&y,&num);16 max_num=max(max_num,num);17 a[num]++;18 w[num][a[num]]=x;19 val[num][a[num]]=y;20 }21 for(int i=1;i<=max_num;i++)22 for(int k=m;k>0;k--)23 for(int j=1;j<=a[i];j++)24 if(k-w[i][j]>=0)25 f[k]=max(f[k],f[k-w[i][j]]+val[i][j]);26 printf("%d",f[m]);27 return 0;28 }
洛谷——P1757 通天之分组背包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。