#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fr(i,a,b,c) for(int i = a;i<b;i+=c)
#define fre(i,a,b,c) for(int i = a;i>=b;i-=c)
#define fs first
#define sc second
#define all(a) a.begin(),a.end()
#define IINF 2000000005
#define LINF 1000000000000000005
#define MOD 998244353
#define str string
#define endl '\n'
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using tiii = tuple<int,int,int>;
int main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int s,n;cin >> s >> n;
vector<vector<pll>> a(s+1);
for(int i = 0 ;i < n;++i){
int v,w,k;cin >> v >> w >> k;
a[w].push_back({v,k});
}
for(int i = 1;i<=s;++i)sort(a[i].rbegin(),a[i].rend());
vector<vector<ll>> dp(s+1,vector<ll>(s+1));
dp[0][0] = 0;
for(int i = 1;i <= s;++i){
dp[i] = dp[i-1];
for(int j = 1; j <= s ; ++j){
if(s - i * j < 0)break;
ll v = 0;
ll used = j;
for(int k = 0;k < a[i].size();++k){
if(!used)break;
v += a[i][k].fs * min(used,a[i][k].sc);
used -= min(used,a[i][k].sc);
}
if(used > 0)break;
for(int k = s;k >= 1;--k){
if(k - i * j < 0)break;
if(dp[i - 1][k - i*j] != -1)dp[i][k] = max(dp[i][k],dp[i-1][k - i * j] + v);
}
}
}
ll mx = 0;
for(int i = 1;i<=s;++i)mx = max(mx,dp[s][i]);
cout << mx << endl;
}
| # | 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... |