社区讨论

求调

P1757通天之分组背包参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mknmf1xo
此快照首次捕获于
2026/01/21 14:07
2 个月前
此快照最后确认于
2026/01/21 14:07
2 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int w[N],v[N],dp[N];
int n,maxw;
int k[N][N];//k i j表示i小组中第j个物品的编号
int group[N];//group i表示小组i中的物品数
int t=-1;//小组数
int main(){
    scanf("%d%d",&maxw,&n);
    for(int i=1;i<=n;++i){
        int x;
        scanf("%d%d%d",&w[i],&v[i],&x);
        ++group[x];
        t=max(t,x);
        k[x][group[x]]=i;
    }
    for(int i=1;i<=t;++i){//枚举组数
        for(int j=maxw;j>=0;--j){//枚举重量
            for(int l=1;l<=group[i];++l){//枚举物品
                if(j<w[k[i][l]])continue;
                dp[j]=max(dp[j],dp[j-w[k[i][l]]]+v[k[i][l]]);
            }
        }
    }
    printf("%d",dp[n]);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...