1 条题解

  • 0
    @ 2025-7-1 22:18:43

    经典的多重背包。

    #include <bits/stdc++.h>
    using namespace std;
    int q[2005],w[2005], c[2005],dp[2005][2005]; //dp[i][j]:前i种物品中容量为j的最大价值 
    int main(){
    	int n,v;
    	cin >> n >> v; 
    	for(int i = 1;i <= n;i++){
    		cin >> q[i] >> w[i] >> c[i]; 
    	}
    	for(int i = 1;i <= n;i++){//第i个物品 
    		for(int j = 1;j <= v;j++){//容量为j 
    			for(int k = 0;k <= q[i] && (w[i] * k <= j);k++){//拿k个 
    				dp[i][j] = max(dp[i][j],dp[i - 1][j - w[i] * k] + c[i] * k);
    			}
    		}
    	}
    	cout << dp[n][v];
    	return 0;
    	}
    
    
    
    • 1

    信息

    ID
    3280
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    22
    已通过
    13
    上传者