top1编程
← 返回题目
题解

【入门】奖品采购

1 条题解

  • 0
    @ 2026-7-29 0:19:17
    #include <bits/stdc++.h>
    using namespace std;
    int n,m,w1,v1,v[512000],g,w[2512345],dp[6123],p;
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		cin>>w1>>v1>>g;
    		int t=1;
    		while(1){
    			if(g>t){
    				w[++p]=w1*t;
    				v[p]=v1*t;
    				g-=t;
    				t*=2;
    			}else{
    				w[++p]=g*w1;
    				v[p]=g*v1;
    				break;
    			}
    		}
    	}
    	for(int i=1;i<=p;i++){
    		for(int j=m;j>=w[i];j--){
    			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
    		}
    	}
    	cout<<dp[m];
    	
    
    	return 0; 
    }
    
    • 1