제출 #1255869

#제출 시각아이디문제언어결과실행 시간메모리
1255869dxfKnapsack (NOI18_knapsack)C++17
100 / 100
86 ms6728 KiB
#include <bits/stdc++.h>


#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

typedef long long ll;
#define change_io() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define el endl
#define all(x) begin(x), end(x)
#define pb push_back
#define mp make_pair
#define INF 1000000005
#define LLINF 1e18
#define MOD 1000000007
#define MOD9 998244353

// remove single val from multiset with -> os.find_by_order(os.order_of_key(x))
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset;
typedef tree<pair<ll, ll>, null_type, less<pair<ll, ll>>, rb_tree_tag, tree_order_statistics_node_update> ordered_pair_set;

const ll N5 = 1e5 + 5;
const ll N6 = 1e6 + 5;
const ll NN5=2e5+5;
const ll N3=1e3+5;
ll dp[2005] {};


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

    map<ll, map<ll, ll>> items;
    for (int i = 0; i < n; ++i) {
        ll w,v,k; cin >> v >> w >>k;
        items[w][-v]+=k;
    }

    for (int i = 1; i <= s; ++i) {
        if (items[i].empty()) continue;
        ll considered = 0;
        while (!items[i].empty() && considered < s/i) {
            auto num = (*items[i].begin());
            items[i].erase(items[i].begin());
            if (num.second != 1) {
                items[i].insert({num.first, num.second-1});
            }

            for (int j = s; j >= i; --j) {
                dp[j] = max(dp[j], dp[j-i]-num.first);
            }
            considered++;
        }
    }

    ll ans = 0;
    for (int i = 0; i <= s; ++i) {
        ans = max(ans, dp[i]);
    }

    cout << ans << el;
}

int main()
{
	//freopen("problemname.in", "r", stdin);
	//freopen("problemname.out", "w", stdout);
    change_io();

    ll T;
    T=1;
    //cin>>T;
    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...