题目
分析
动态转移方程:
AC代码
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
int s, t;
}node[10005];
int dp[10005], start[100005];
int main()
{
int n, m, k;
scanf("%d%d", &n, &k);
for (int i = 1; i <= k; i++)
{
scanf("%d%d", &node[i].s, &node[i].t);
start[node[i].s]++;
}
sort(node + 1, node + 1 + n, [](Node a, Node b){ return a.s > b.s; });
for (int i = n; i >= 1; i--)
{
if (start[i] == 0)
{
dp[i] = dp[i + 1] + 1;
}
else
{
for (int j = 1; j <= k; j++)
{
if (node[j].s == i)
{
dp[i] = max(dp[i + node[j].t], dp[i]);
}
}
}
}
cout << dp[1] << endl;
return 0;
}