Submission #1148125

#TimeUsernameProblemLanguageResultExecution timeMemory
1148125quangnamoiracvl_ralaidecuKnapsack (NOI18_knapsack)C++20
100 / 100
54 ms2888 KiB
/* Dirty code by Articulation_points */
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXS=2e3;
int n,m,v,w,t,dp[MAXS+5];
vector<pair<int,int>>wi[MAXS+5];
bool cmp(pair<int,int>x,pair<int,int>y){
    return x.first>y.first;
}
vector<int>val[MAXS+5];
signed main(){
    cin.tie(0)->sync_with_stdio(false);
    cin>>m>>n;
    while(n--){
        cin>>v>>w>>t;
        wi[w].push_back({v,t});
    }
    for(int i=1;i<=m;++i)
        if(wi[i].size())
            sort(wi[i].begin(),wi[i].end(),cmp);
    for(int i=1;i<=m;++i){
        int j=0;
        bool check=false;
        for(pair<int,int>tmp:wi[i]){
            if(check)
                break;
            v=tmp.first;
            t=tmp.second;
            for(int k=j+1;k<=j+t;++k){
                if(k*i>m){
                    break;
                    check=true;
                }
                val[i].push_back(v);
            }
            j+=t;
        }
    }
    for(int i=1;i<=m;++i){
        for(int s=m;s>=0;--s){
            int sum=0;
            int cnt=0;
            for(int v:val[i]){
                sum+=v;
                cnt++;
                if(s>=cnt*i)
                    dp[s]=max(dp[s],dp[s-cnt*i]+sum);
            }
        }
    }
    cout<<dp[m]<<'\n';
}
#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...