一个困惑许久的问题
查看原帖
一个困惑许久的问题
581107
poppingW楼主2023/6/30 11:36

先给dalao理解我的代码(变量有点乱请谅解)

#include<iostream>
#include<iomanip>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstring>
#include<map>
#include<cstdio>
using namespace std;
const int N=1e4+10;
int m,n,t,x; 
int g[205][205];
int w[N],z[N],b[N],dp[N];
int main(){
    scanf("%d%d",&m,&n);
    for(int i=1;i<=n;i++){
        cin>>w[i]>>z[i]>>x;
        t=max(t,x);
        b[x]++;//第x组有几个物品 
        g[x][b[x]]=i;//记录物品 
    }
    for(int i=1;i<=t;i++){
        for(int j=m;j>=0;j--){
            for(int k=1;k<=b[i];k++){
                if(j>=w[g[i][k]]){
                    dp[j]=max(dp[j],dp[j-w[g[i][k]]]+z[g[i][k]]);
                }
            }
        }
    }
    cout<<dp[m];
    return 0;
}

附上我的问题:三个for循环那里的第二个循环为什么不像01背包滚动下限为w[i],而是将下限设到0呢?(前者只会得4分)

2023/6/30 11:36
加载中...