社区讨论
求真却答案
P1757通天之分组背包参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m63a5566
- 此快照首次捕获于
- 2025/01/19 15:12 去年
- 此快照最后确认于
- 2025/11/04 11:18 4 个月前
CPP
#include<bits/stdc++.h>
#define N 1001
#define K 101
using namespace std;
struct thing{
int a,b;
};
vector<thing> group[K];
int f[N],m,n,a,b,c,k=0;
//f[i]代表重量为i时的最大价值
//假设第c租有a1,a2,a3三件物品
//{f[i] f[i-a1]+b1 f[i-a2]+b2 f[i-a3]+b3}中选取最大的
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
group[c].push_back({a,b});
//第c组中增加了一件重量为a,价值为b的物品
for(int j=a;j>=a;j--){
f[j]=max(f[j],f[j-a]+b);
}
k=max(k,c);//把最大组编号记录下来
}
cout<<f[m];
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...