时间资源分配问题;
i表示第1~i 秒 最大的闲暇时间的话
那每次都还要看结束的时候 是否有多的时间 很难想
所以从后往前想 如果后面开始的时间是多的那肯定是多的;
如果前面有的话 那只要 结束时间的 最大闲暇时间就行了
dp[i] = max(dp[i],dp[i + w[i]]);
#include<iostream>
#include<vector>
using namespace std;
const int N = 10010;
vector<int>v[N];
int dp[N];
int main(){
int n,m,s;
cin >> n >> m;
int x,y;
for(int i = 1; i <= m; i++){
cin >> x >> y;
v[x].push_back(y);
}
for(int i = n; i >= 1; i--){
if(v[i].size()){
for(int j = 0; j < v[i].size(); j++){
dp[i] = max(dp[i],dp[i + v[i][j]]);
}
}else{
dp[i] = dp[i + 1] + 1;
}
}
cout << dp[1] << endl;
return 0;
}