#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,s;
cin >> s >> n;
vector<long long >arr(n);
vector<long long >wei(n);
vector<long long >qua(n);
for(long long i = 0;i < n;i++)
{
cin >> arr[i] >> wei[i] >> qua[i];
}
vector<vector<pair<long long ,long long >>>dp(n,vector<pair<long long ,long long >>(s + 1,{0,0}));
for(long long w = 0;w <= s;w++)
{
long long a = min(qua[0],(w/wei[0]));
dp[0][w] = {a*arr[0],a};
}
for(long long i = 1;i < n;i++)
{
for(long long w = 0;w <= s;w++)
{
long long take = 0;
long long q = 0;
if(wei[i] <= w)
{
q = dp[i][w - wei[i]].second;
if(q < qua[i])
{
take = arr[i] + dp[i][w - wei[i]].first;
}
else
{
take = arr[i] + dp[i - 1][w - wei[i]].first;
q = 0;
}
}
long long nottake = dp[i - 1][w].first;
if(take > nottake)
{
dp[i][w] = {take,q + 1};
}
else
{
long long q2 = 0;
dp[i][w] = {nottake,q2};
}
}
}
cout<<dp[n - 1][s].first<<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... |