#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 1e18;
int dp[2005], ndp[2005];
struct item
{
int v, w, k;
};
void solve()
{
int s, n;
cin >> s >> n;
vector<item> a(n);
for (int i = 0; i < n; i++)
{
cin >> a[i].v >> a[i].w >> a[i].k;
}
for (int i = 0; i <= s; i++)
{
dp[i] = -INF;
}
dp[0] = 0;
for (auto &it : a)
{
int w = it.w, v = it.v, k = it.k;
for (int r = 0; r < w; r++)
{
deque<pair<int, int>> q;
int cnt = 0;
for (int i = r; i <= s; i += w, cnt++)
{
int b = dp[i] - cnt * v;
while (!q.empty() && q.back().first <= b)
q.pop_back();
q.push_back({b, cnt});
while (!q.empty() && q.front().second < cnt - k)
q.pop_front();
ndp[i] = q.front().first + cnt * v;
}
}
for (int i = 0; i <= s; i++)
dp[i] = max(dp[i], ndp[i]);
}
int ans = 0;
for (int i = 0; i <= s; i++)
ans = max(ans, dp[i]);
cout << ans;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++)
{
// cout << "Case #" << i << ':' << ' ';
solve();
cout << 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... |