#include <bits/stdc++.h>
//#define int long long
#define ii pair<int,int>
#define x first
#define y second
#define SYNC ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define lef (idx*2)+1
#define rig (idx*2)+2
#define mid (l+r)/2
#define MAX 2003
using namespace std;
int32_t main()
{
int s, n;
cin >> s >> n;
int v[n];
int w[n];
int k[n];
int dp[2][s+1];
for(int i=0;i<=1;i++)
{
for(int j=0;j<=s;j++)
dp[i][j]=0;
}
for(int i=1;i<=n;i++)
{
int w, v, k;
cin >> v >> w >> k;
k = min(k, MAX);
for(int j=0;j<=s;j++)
{
//NOT TAKE
int nt = dp[(i+1)%2][j];
//TAKE
int m;// = min(k, j/w);
int t = 0;
for(m=0;m<=k;m++)
{
if(j>=m*w)
t = dp[(i+1)%2][j-m*w]+v*m;
//cout << t<< " - "<<nt<<" "<<m <<" "<<j<<" "<<w<<" "<<i<<endl;
dp[i%2][j] = max(dp[i%2][j],max(nt, t));
}
}
}
cout << dp[n%2][s];
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... |