P1156 垃圾陷阱https://www.luogu.com.cn/problem/P1156
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <cstdlib>
#include <deque>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1000010;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
struct node {
int t, h, f;
bool operator <(const node b) {
return t < b.t;
}
} s[MAXN];
int dp[MAXN];
int d, g;
int main() {
scanf("%d %d", &d, &g);
for (int i = 1; i <= g; i++) {
scanf("%d %d %d", &s[i].t, &s[i].f, &s[i].h);
}
sort(s + 1, s + g + 1);
dp[0] = 10;
for (int i = 1; i <= g; i++) {
for (int j = d; j >= 0; j--) {
if (dp[j] >= s[i].t) {
if (j + s[i].h >= d) {
printf("%d", s[i].t);
return 0;
}
dp[j + s[i].h] = max(dp[j + s[i].h], dp[j]);
dp[j] += s[i].f;
}
}
}
printf("%d", dp[0]);
return 0;
}