RT,代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
#define p first
#define t second
int m, n, f[N];
pair<int, int> v[N];
int dfs(int now_time, int last) {
if (now_time > v[n].p) return 0;
if (f[now_time] != -1) return f[now_time];
int i = last + 1;
for (; i <= n; i++)
if (v[i].p >= now_time) break;
int res = INT_MAX;
for (int j = i; j <= n; j++) {
if (v[j].p != v[i].p) break;
res = min(res, v[j].t + dfs(v[j].p + v[j].t - 1, j));
}
return f[now_time] = res;
}
int main() {
memset(f, -1, sizeof(f));
cin >> m >> n;
for (int i = 1; i <= n; i++)
cin >> v[i].p >> v[i].t;
sort(v + 1, v + 1 + n);
cout << m - dfs(1, 0) << endl;
return 0;
}
只过了样例 & 第一个点。。。