分组背包,一开始因为没注意每组可以一个都不选的情况,一直没调出来,其实每组数据加个0 0就行

#include<bits/stdc++.h>
using namespace std;
int dp[13][120000];
int v[200];//价值
int w[200];//重量
int num=0;
void ope()
{
    memset(dp,0,sizeof dp);
    memset(v,0,sizeof v);
    memset(w,0,sizeof w);
    int ans=0;
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=5*n;i++){
        if(i%5==0){
            w[i]==0;
            v[i]==0;
        }else{
            cin>>w[i];
            cin>>v[i];
        }
    }
    for(int i=1;i<=5*n;i++){
        int k=(i+4)/5;
        for(int j=m;j>=w[i];j--){
            dp[k][j]=max(dp[k][j],dp[k-1][j-w[i]]+v[i]);
        }
    }
    for(int k=1;k<=n;k++){
        for(int i=0;i<=m;i++){
            ans=max(ans,dp[k][i]);
        }
    }
    cout<<"Budget #"<<++num<<": Maximum of "<<ans<<" lives saved."<<endl<<endl;
}
int main()
{
    int n;
    cin>>n;
    while(n--){
        ope();
    }
    return 0;
}