Submission #1290139

#TimeUsernameProblemLanguageResultExecution timeMemory
1290139AbdullahIshfaqKnapsack (NOI18_knapsack)C++20
100 / 100
558 ms584 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 998244353
void solve()
{
	int s, n, dp[2005], v, w, k;
	cin >> s >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> v >> w >> k;
		for (int r = 0; r < w; r++)
		{
			int dq[2005][2], head = 0, tail = 0, q = 0;
			for (int j = r; j <= s; j += w)
			{
				int mn = min(q, k);
				while (tail - head > 0 and dq[head][1] < q - mn)
				{
					head++;
				}
				while (tail - head > 0 and dq[tail - 1][0] <= dp[j] - q * v)
				{
					tail--;
				}
				dq[tail][0] = dp[j] - q * v;
				dq[tail][1] = q;
				tail++;
				dp[j] = dq[head][0] + q * v;
				q++;
			}
		}
	}
	cout << dp[s] << '\n';
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	ll t = 1;
	// cin >> t;
	for (ll i = 1; i <= t; i++)
	{
		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...