This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
#define f first
#define s second
#define pb push_back
#define endl '\n'
using namespace std;
int S,N,V,W,K,dp[2002],ans;
map<pair<int, int>, int> m;
void solve() {
cin >> S >> N;
dp[0] = 0;
for (int i = 1; i <= S; i++) dp[i] = -1e9;
if (N >= 1000) {
for (int i = 1; i <= N; i++) {
cin >> V >> W >> K;
K = min(K, S / W);
if (m.count({W, K})) m[{W, K}] = max(m[{W, K}], V);
else m[{W, K}] = V;
}
for (auto cur : m) {
V = cur.s;
W = cur.f.f;
K = cur.f.s;
// cout << V << ' ' << W << ' ' << K << endl;
while (K--) {
for (int j = S; j >= W; j--) {
dp[j] = max(dp[j], dp[j - W] + V);
}
}
}
}
else {
for (int i = 1; i <= N; i++) {
cin >> V >> W >> K;
K = min(K, S / W);
while (K--) {
for (int j = S; j >= W; j--) {
dp[j] = max(dp[j], dp[j - W] + V);
}
}
}
}
for (int i = 0; i <= S; i++) ans = max(ans, dp[i]);
cout << ans << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int tttt = 1;
//cin >> tttt;
while (tttt--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |