Submission #1217210

#TimeUsernameProblemLanguageResultExecution timeMemory
1217210_llKnapsack (NOI18_knapsack)C++20
In queue
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll v[300000], p[300000], re[2001], m = 0;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    ll s, n; cin >> s >> n;
    for(ll i = 0, a, b, q; i < n; i++){
        cin >> a >> b >> q;
        v[m] = a, p[m++] = b;
        ll pd = 1, sm = 1; // um já foi
        while(sm + (pd << 1) <= q){
            pd <<= 1, sm += pd;
            v[m] = pd * a, p[m++] = pd * b;
        }
        if(sm < q) v[m] = (q - sm) * a, p[m++] = (q - sm) * b;
    }
    for(ll i = 0; i < m; i++)
        for(ll j = s - p[i]; j >= 0; j--)
            re[j + p[i]] = max(re[j + p[i]], re[j] + v[i]);
    cout << re[s] << '\n';
}