分组背包,一开始因为没注意每组可以一个都不选的情况,一直没调出来,其实每组数据加个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; }