铜标也能过
2026-08-03 16:08:19
发布于:浙江
11阅读
0回复
0点赞
直接把多重背包代码加一个判断就好了,如果s[i]==0,就把s[i]改成1000
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long dp[111][311];
long long w[1111];
long long v[1111];
long long s[1111];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++)cin>>w[i]>>v[i]>>s[i];
for(int i=1;i<=n;i++){
if(s[i]==0){
s[i]=1111;
}
for(int j=0;j<=m;j++){
for(int k=0;k<=s[i]&&k*w[i]<=j;k++){
dp[i][j]=max(dp[i][j],dp[i-1][j-k*w[i]]+k*v[i]);
}
}
}
cout<<dp[n][m];
return 0;
}
求个赞
全部评论 1
6
1周前 来自 广东
0













有帮助,赞一个