Submission #1344042

#TimeUsernameProblemLanguageResultExecution timeMemory
1344042po_rag526Knapsack (NOI18_knapsack)C++20
100 / 100
94 ms2924 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+6;
const int MAX=2e3+4;
vector<int>v[N];
vector<pair<int,int>>v1[N];
int dp[N];
void solve(){
    int s,n;cin>>s>>n;
    for(int i=1;i<=n;i++){
        int x,y,z;
        cin>>x>>y>>z;
        v1[y].push_back({x,z});
    }
    int cnt=0;
    for(int i=1;i<=MAX-1;i++){
        sort(v1[i].begin(),v1[i].end(),greater<pair<int,int>>());
        cnt=s/i;
        for(int j=0;j<v1[i].size();j++){
            if(v[i].size()<cnt){
                int s1=v1[i][j].second;
                while(s1){
                    v[i].push_back(v1[i][j].first);
                    s1--;
                    if(v[i].size()>=cnt) break;
                }
            }
        }
    }
    for(int i=0;i<=MAX-1;i++){
        sort(v[i].begin(),v[i].end(),greater<int>());
    }
    for(int w=1;w<=s;w++){
        for(int i=0;i<v[w].size();i++){
            for(int j=s;j>=w;j--){
                //ignore if(j>=w)
                dp[j]=max(dp[j],dp[j-w]+v[w][i]);
            }
        }
    }
    int ans=0;
    for(int j=0;j<=s;j++){
        ans=max(ans,dp[j]);
    }
    cout<<ans;
}
signed main(){
    int t=1;//cin>>t;
    while(t--){
        solve();
    }
}//aaa
#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...