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