Submission #1236359

#TimeUsernameProblemLanguageResultExecution timeMemory
1236359jiraphatnam2204Knapsack (NOI18_knapsack)C++20
73 / 100
1097 ms16796 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
const ll mod=998244353;

struct Item{
    ll v;
    ll w;
};

ll dp[2002];

void solve(){
    ll s, n; cin>>s>>n;
    vector<Item> items;
    for (ll i=0; i<n; i++){
        ll v, w, k;
        cin>>v>>w>>k;
        for (ll p=1; k>0; p*=2){
            ll cnt=min(k, p);
            items.push_back({cnt*v, cnt*w});
            k-=cnt;
        }
    }
    for(auto &item: items){
        for (ll j=s; j>=item.w; j--){
            dp[j]=max(dp[j], dp[j-item.w]+item.v);
        }
    }
    cout << dp[s] << '\n';
    return;
}

int main(){
	cin.tie(NULL)->sync_with_stdio(false);
	// precomputation
	//
	const bool multitest=false;
	if(multitest){
		ll t; cin>>t;
		while(t--){
			solve();
		}
	} else {
		solve();
	}
	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...