代码如下:
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
inline int read(){
int s = 0;
char c = getchar();
while(c > '9' || c < '0') c = getchar();
while(c >= '0' && c <= '9') s = s * 10 + c - '0', c = getchar();
return s;
}
vector<int> q[305], qq[305];
int n = read(), m = read(), w[45000], l[45000], r[45000];
long long dp[305][305];
int main(){
for(int i = 1; i <= m; i++)
w[i] = read(), l[i] = read(), r[i] = read(),
q[l[i]].push_back(i), qq[r[i]].push_back(i);
for(int i = 1; i <= n; i++){
for(int j = 1; j + i - 1 <= n; j++){
int y = j + i - 1;
dp[j][y] = max(dp[j + 1][y], dp[j][y - 1]);
for(auto k : q[j])
if(r[k] <= y) dp[j][y] = max(dp[j][y], dp[j + 1][y] + w[k]);
for(auto k : qq[y])
if(l[k] >= j) dp[j][y] = max(dp[j][y], dp[j][y - 1] + w[k]);
}
}
cout << dp[1][n];
return 0;
}