제출 #1161841

#제출 시각아이디문제언어결과실행 시간메모리
1161841CiprianKnapsack (NOI18_knapsack)C++20
73 / 100
386 ms327680 KiB

#include <bits/stdc++.h>
using namespace std;
#define int long long 
int dp[(int)1e5+5][(int)2005];
bool dp1[(int)1e5+5][(int)2005];
int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int s,n;
    cin>>s>>n;
    vector<int>v(n+1),w(n+1),k(n+1);
    for(int i=1; i<=n; i++){
        cin>>v[i]>>w[i]>>k[i];
        
    }int mx=0;
    if(n==1){
        if(k[1]*w[1]<=s)cout<<k[1]*v[1]<<endl;
        else{
            for(int i=k[1]; i>=0; i--){
                if(i*w[1]<=s){
                    cout<<i*v[1]<<endl;
                    break;
                }
            }
        }
    }else{
        for(int i=1; i<=n; i++){
            for(int j=0; j<=s; j++){
                dp[i][j]=dp[i-1][j];
                for(int x=1; x<=min(j/w[i], k[i]); x++){
                if(j-x*w[i]>=0)dp[i][j]=max(dp[i][j], dp[i-1][j-x*w[i]]+x*v[i]);
                }
                mx=max(mx, dp[i][j]);
            }
        }cout<<mx<<endl;
    }
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...