#include<bits/stdc++.h>
using namespace std;
#define f_(i,a,b) for(int i=a;i>=b;i--)
#define f(i,a,b) for(long long i=a;i<b;i++)
#define all(v) v.begin(),v.end()
#define maxm(a,b) a=max(a,b)
#define minm(a,b) a=min(a,b)
#define SZ(x) int(x.size())
#define MP make_pair
#define pb push_back
#define S second
#define F first
#define pss ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define kill(a) {cout<<a<<'\n';return;}
typedef long long ll;
typedef double dbl;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<long long,long long> pll;
typedef pair<ld,ld> pdd;
typedef pair<int,long long> pil;
typedef pair<long long,int> pli;
//#pragma GCC optimize("Ofast")
#pragma GCC optimize("O3,unroll-loops")
const int xn=2000+4,Mb=35,mod=998244353,mod2=1e9+7,inf= 2e9+2;
int n,m,ans;
ll dp[xn][xn];
vector<pli> v[xn];
void solve(){
cin>>m>>n;
ll a,b,c;
f(i,1,n+1){
cin>>a>>b>>c;
v[b].pb({a,c});
}
f(i,1,m+1){
f(j,0,m+1)dp[i][j]=dp[i-1][j];
sort(all(v[i]),greater<pli>());
a=0;
b=c=0;
while(a!=SZ(v[i])){
b+=v[i][a].F;
v[i][a].S--;
if(v[i][a].S==0){
a++;
}
c+=i;
if(c>m)break;
f(j,c,m+1){
maxm(dp[i][j],dp[i-1][j-c]+b);
}
}
}
cout<<dp[m][m]<<'\n';
}
int main(){
pss
int Test=1;
// cin>>Test;
while(Test--){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... |