제출 #1248602

#제출 시각아이디문제언어결과실행 시간메모리
1248602Daniel_1997Knapsack (NOI18_knapsack)C++20
100 / 100
68 ms3144 KiB
#include<bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
//\\ PRINCIPAL \\//
 
#define oo 1e18
#define endl "\n"
#define int long long
#define mod 1000000007
#define tle while(1){;}
#define ios ios_base::sync_with_stdio(0); cin.tie(0),cout.tie(0)
 
//\\ BITS \\//
 
#define bits_1 __builtin_popcount 
 
//\\ STL \\//
 
#define fr first
#define sc second
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define lb(x,y) lower_bound(x.begin(),x.end(),y)-x.begin()
#define ub(x,y) upper_bound(x.begin(),x.end(),y)-x.begin()


void solve() {
    int k,n;
    cin >> k >> n;

    vector<pair<int,pair<int,int> > >v(n + 1,{oo,{oo,oo}});

    for(int i = 1; i <= n; i++)
    {
        cin >> v[i].fr >> v[i].sc.fr >> v[i].sc.sc;
    }


    sort(all(v));
    reverse(all(v));

    map<int,int>mapp;

    vector<pair<int,int> >v2;

    for(int i = 1; i <= n; i++)
    {  
        for(int j = 1; j <= min(k / v[i].sc.fr - mapp[v[i].sc.fr],v[i].sc.sc); j++)
        {
            v2.pb({v[i].sc.fr,v[i].fr});
        }
        mapp[v[i].sc.fr] = min(k / v[i].sc.fr,mapp[v[i].sc.fr] + v[i].sc.sc);
    }


    vector<int>dp(k + 1,-oo);
    dp[0] = 0;

    for(int i = 0; i < v2.size(); i++)
    {
        for(int j = k; j >= v2[i].fr; j--)
        {
            if(dp[j - v2[i].fr] == -oo)continue;
            dp[j] = max(dp[j],dp[j - v2[i].fr] + v2[i].sc);
            
        }
    }

    int maxx = 0;

    for(int i = 1; i <= k; i++)
    {
        maxx = max(maxx,dp[i]);
    }

    cout << maxx << endl;

}

int32_t main() {
    ios;

    //freopen("taming.in", "r", stdin);
    //freopen("taming.out", "w", stdout);

    int t = 1;
    while(t--)solve();

    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...