#include <bits/stdc++.h>
using namespace std;
int n, H;
struct trash
{
int t, f, h;
}a[1005];
int dp[1005][105];
bool cmp(trash a, trash b)
{
return a.t < b.t;
}
int main()
{
memset(dp, -1, sizeof dp);
cin >> H >> n;
for (int i = 1; i <= n; i ++)
{
cin >> a[i].t >> a[i].f >> a[i].h;
}
sort(a + 1, a + 1 + n, cmp);
dp[0][0] = 10, a[n + 1].t = a[n].t;
for (int i = 0; i <= n; i ++)
{
for (int j = 0; j <= H; j ++)
{
if (dp[i][j] < 0) continue;
if (j + a[i].h >= H && dp[i][j] - (a[i + 1].t - a[i].t) >= 0)
{
cout << a[i].t << endl;
return 0;
}
dp[i + 1][j + a[i].h] = max(dp[i + 1][j + a[i].h], dp[i][j] - (a[i + 1].t - a[i].t));
dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] - (a[i + 1].t - a[i].t) + a[i].f);
}
}
int maxn = 0, h = 10;
for (int i = 1; i <= n + 1; i ++)
{
h = h - (a[i].t - a[i - 1].t) + a[i].f;
maxn = max(maxn, h);
}
cout << maxn << endl;
return 0;
}
36pts,刷表法