top1编程
← 返回题目
题解

【基础】多重背包(1)

1 条题解

  • 0
    @ 2026-7-29 0:18:06
    #include<bits/stdc++.h>
    using namespace std;
    int dp[120],w[120],v[120],s[120],n,m;
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		//分别输入重量价值数量
    		cin>>w[i]>>v[i]>>s[i];
    	}
    	for(int i=1;i<=n;i++){//物品的种类
    		for(int j=m;j>=w[i];j--){//01背包的更新范围
    			for(int k=0;k<=min(j/w[i],s[i]);k++){
    				dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
    			}
    		}
    	}
    	cout<<dp[m];
    	return 0;
    }
    
    • 1