#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
#define all(v) v.begin(), v.end()
void solve(){
int s, n;
cin >> s >> n;
vector<pair<int, int>> v[s+1];
int x[n], w[n], k[n];
for(int i=0; i<n; i++){
cin >> x[i] >> w[i] >> k[i];
v[w[i]].push_back({x[i], k[i]});
}
for(int i=1; i<=s; i++){
sort(all(v[i]));
}
int dp[s+1][s+1];
for(int i=0; i<=s; i++){
dp[0][i]=0;
}
for(int j=0; j<=s; j++){
dp[j][0]=0;
}
for(int i=1; i<=s; i++){
for(int j=1; j<=s; j++){
dp[i][j]=dp[i][j-1];
int i1=v[j].size()-1, j1=1;
if((int)v[j].size()<1){
continue;
}
int ck=j, sum=v[j][v[j].size()-1].f;
while(ck<=i){
dp[i][j]=max(dp[i][j], dp[i-ck][j-1]+sum);
ck+=j;
if(j1==v[j][i1].s){
i1--;
if(i1<0){
break;
}
j1=1;
}else{
j1++;
}
sum+=v[j][i1].f;
}
}
}
cout << dp[s][s];
}
int main(){
cin.tie(nullptr)->sync_with_stdio(0);
int t=1;
//cin >> t;
while(t--){
solve();
cout << "\n";
}
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... |