Submission #601396

#TimeUsernameProblemLanguageResultExecution timeMemory
601396codergirlKnapsack (NOI18_knapsack)C++14
0 / 100
1 ms212 KiB
#include <bits/stdc++.h>

const int maxn=100005;
int c[maxn],value[maxn],num[maxn],dp[maxn];
int V;

void ZeroOnePack (int cost,int val){
    for(int i=V;i-->cost;)
        dp[i]=std::max(dp[i],dp[i-cost] + val);
    return ;
}

void MultiplePack(int cost, int val, int tot){
    int k=1; // binary partition
    while(k<tot){
        ZeroOnePack(k * cost, k * val);
        tot-=k;
        k*=2;
    }
    ZeroOnePack(tot*cost,tot*val);
    return ;
}
int main(){
    int n;
    std::cin>>V>>n; // knapsack size V, n kinds of items
    for(int i=1;i<=n;i++)
        std::cin>>value[i]>>c[i]>>num[i]; // value, weight, quantity
    for(int i=1;i<=n;i++)
        MultiplePack(c[i], value[i], num[i]);
    std::cout<<dp[V]<<'\n';
    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...