1 solutions

  • 1
    @ 2025-5-10 15:55:52
    #include <bits/stdc++.h>
    using namespace std;
    int n,m,dp[6001];
    struct prize{
    	int v,w;
    };
    vector<prize> a;
    int main(){
    	scanf("%d%d",&n,&m);
    	a.push_back({0,0});
    	for(int i = 1;i<=n;i++){
    		int b,c,d;
    		scanf("%d%d%d",&b,&c,&d);
    		for(int j = 1;j<=d;j++)a.push_back({b,c});
    	}
    	int aa = a.size();
    	for(int i = 1;i<aa;i++)
    		for(int j = m;j>=a[i].v;j--)dp[j] = max(dp[j],dp[j-a[i].v]+a[i].w);
    	printf("%d",dp[m]);
    	return 0;
    }
    
    #include <bits/stdc++.h>
    using namespace std;
    int n,m,dp[6001];
    struct prize{
    	int v,w,s;
    };
    vector<prize> a;
    int main(){
    	scanf("%d%d",&n,&m);
    	a.push_back({0,0,0});
    	for(int i = 1;i<=n;i++){
    		int b,c,d;
    		scanf("%d%d%d",&b,&c,&d);
    		a.push_back({b,c,d});
    	}
    	int aa = a.size();
    	for(int i = 1;i<aa;i++)
    		for(int j = m;j>=a[i].v;j--)
    			for(int k = 0;k<=min(j/a[i].v,a[i].s);k++)dp[j] = max(dp[j],dp[j-a[i].v*k]+a[i].w*k);
    	printf("%d",dp[m]);
    	return 0;
    }
    
    #include <bits/stdc++.h>
    using namespace std;
    int wi,vi,si,m,n,cnt,v[2001],w[2001],dp[6001];
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i = 1;i<=n;i++){
    		scanf("%d%d%d",&vi,&wi,&si);
    		for(int j = 1;j<=si;j*=2){
    			cnt++;
    			v[cnt] = vi*j;
    			w[cnt] = wi*j;
    			si-=j;
    		}
    		if(si){
    			cnt++;
    			v[cnt] = vi*si;
    			w[cnt] = wi*si;
    		}
    	}
    	for(int i = 1;i<=cnt;i++)
    		for(int j = m;j>=v[i];j--)dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
    	printf("%d",dp[m]);
    	return 0;
    }
    
    • 1

    Information

    ID
    745
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    9
    Tags
    (None)
    # Submissions
    21
    Accepted
    3
    Uploaded By