#include <bits/stdc++.h>
using namespace std;
const int NINF = -1e9;
int S, n;
// pair<val, qty> O[weight]
int dp[2005];
priority_queue<pair<int,int>> O[2005];
int main(){
cin >> S >> n;
for (int i = 1; i <= S; i++) dp[i] = NINF;
for (int i = 1; i <= n; i++){
int v, w, k;
cin >> v >> w >> k;
O[w].push({v, k});
}
for (int w = 1; w <= 2000; w++){
if (O[w].empty()) continue;
int fit = S/w;
while (!O[w].empty()){
auto [v, k] = O[w].top(); O[w].pop();
int x = min(fit, k);
for (int bit = 1; x >= bit; bit<<=1){
for (int i = S; i >= w*bit; i--){
dp[i] = max(dp[i-w*bit]+v*bit, dp[i]);
}
x -= bit;
}
if (x != 0){
for (int i = S; i >= w*x; i--){
dp[i] = max(dp[i-w*x]+v*x, dp[i]);
}
}
if (fit <= k) break;
fit -= k;
}
}
int ans = 0;
for (int i = 1; i <= S; i++){
ans = max(dp[i], ans);
}
cout << ans << endl;
return 0;
}
| # | 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... |