第一!(学完背包练练手,结果一遍过)
2025-03-30 22:34:08
发布于:浙江
7阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n,m,x[105],a[105],b[105],c[105],dp[105][505];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x[i];
cin>>a[i]>>b[i];
if(x[i]==2) cin>>c[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
dp[i][j]=max(dp[i][j],dp[i-1][j]);
if(x[i]==1){
for(int k=0;k<=j;k++){
dp[i][j]=max(dp[i][j],dp[i-1][j-k]+a[i]kk-b[i]k);
}
}else if(x[i]==2){
for(int k=0;k<=c[i]&&kb[i]<=j;k++){
dp[i][j]=max(dp[i][j],dp[i-1][j-kb[i]]+ka[i]);
}
}else{
for(int k=0;kb[i]<=j;k++){
dp[i][j]=max(dp[i][j],dp[i-1][j-kb[i]]+k*a[i]);
}
}
}
}
cout<<dp[n][m];
return 0;
}
这里空空如也
有帮助,赞一个