제출 #499808

#제출 시각아이디문제언어결과실행 시간메모리
499808mewnianKnapsack (NOI18_knapsack)C++14
100 / 100
56 ms7300 KiB
//#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #define sze(x) (ll) x.size() #define idx(x, a) get<x>(a) #define LID(x) (x << 1LL) #define RID(x) (x << 1LL) + 1LL #define ID(x) (x + MAXN) #define CONV(x) (x - MAXN) #define countbit(x) __builtin_popcountll(x) #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pi; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rng); } const ll MAXN = 100'003; const ll MAXS = 2003; const ll INF = 1e18; const ld EPS = 1e-9; ll n, s; ll dp0[MAXS], dp1[MAXS]; vector<pi> a[MAXN]; void solve() { fill(dp0, dp0 + s + 1, 0); for (ll wi = 1; wi <= s; ++wi) { if (a[wi].empty()) continue; sort(a[wi].begin(), a[wi].end(), greater<pi>()); vector<ll> sumval((s / wi) + 2); for (ll i = 1, r = 0; i < (ll)sumval.size(); ++i) { sumval[i] = sumval[i - 1] + a[wi][r].fi * max(0LL, min(1LL, a[wi][r].se)); --a[wi][r].se; while (r + 1 < (ll)a[wi].size() && a[wi][r].se == 0) ++r; } for (ll sn = 0; sn <= s; ++sn) { dp1[sn] = 0; for (ll i = sn, cnt = 0; i >= 0; i -= wi, ++cnt) { dp1[sn] = max(dp1[sn], dp0[i] + sumval[cnt]); } } // for (ll sn = 0; sn <= s; ++sn) cerr << dp1[sn] << " "; for (ll sn = 0; sn <= s; ++sn) dp0[sn] = dp1[sn]; // cerr << endl; } cout << dp1[s]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifdef OFFLINE freopen("input.inp", "r", stdin); #endif cin >> s >> n; for (ll i = 1; i <= n; ++i) { ll vi, wi, ki; cin >> vi >> wi >> ki; a[wi].pb({vi, ki}); } solve(); }
#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...