Submission #1274345

#TimeUsernameProblemLanguageResultExecution timeMemory
1274345kiteyuKnapsack (NOI18_knapsack)C++20
100 / 100
38 ms2800 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using ll=long long;
const int N=1e5;
const int M=2e6;
int s,n,n1=0;
struct node{
    int v;
    int w;
    int k;
}a[N+5],b[M+5];
int dp[2005];
vector<pair<int,int>>g[2005];

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>s>>n;
    for(int i=1;i<=n;++i){
        cin>>a[i].v>>a[i].w>>a[i].k;
        g[a[i].w].push_back({a[i].v,a[i].k});
    }
    for(int i=1;i<=s;++i){
        sort(g[i].begin(),g[i].end(),greater<pair<int,int>>());
        int cur=0;
        for(int j=0;j<(int)g[i].size();++j){
            while(cur<s/i&&g[i][j].se>0){
                g[i][j].se--;
                cur++;
                for(int l=s-i;l>=0;--l)
                    dp[l+i]=max(dp[l+i],dp[l]+g[i][j].fi);
            }
        }

    }
    int ans=0;
    for(int i=0;i<=s;++i)
        ans=max(ans,dp[i]);
    cout<<ans;
    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...