제출 #1204195

#제출 시각아이디문제언어결과실행 시간메모리
1204195bahaktlKnapsack (NOI18_knapsack)C++20
100 / 100
40 ms3588 KiB
#include <bits/stdc++.h>

using namespace std;

#define sz size()
#define nah "No\n"
#define yeah "Yes\n"
#define F first 
#define S second 
#define int long long
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int inf=1e13;
const int N=1e6+7;
const int mod=1e9+7;

int dp[2001];
int us[N];
signed main() {
    ios_base::sync_with_stdio(false);cin.tie(nullptr);
    // freopen("snakes.in","r",stdin);
    // freopen("snakes.out","w",stdout);
    int n,k;
    cin>>k>>n;

    vector<pair<pair<int,int>,int>>v;
    for(int i=1;i<=n;i++) {
        pair<pair<int,int>,int> b;
        int c,w,a;
        cin>>c>>w>>a;
        b.F.F=c;
        b.F.S=w;
        b.S=a;
        v.pb(b);
    }
    sort(rall(v));
    dp[0]=0;
    for(int i=1;i<=k;i++) dp[i]=-inf;
    for(auto b:v) {
        int c=b.F.F,w=b.F.S,a=b.S;
        for(int l=1;l<=min(k,a);l++) {
            if(us[w]>2000/w) break;
            for(int j = k;j >= w; j--) {
                dp[j] = max(dp[j],dp[j - w] + c);
            }
            us[w]++;
        }
    }
    int ans=-inf;
    for(int i = 0;i <= k; i++) {
        ans=max(ans, dp[i]);
    }
    cout<<ans;
}
#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...