用vector保存第i分钟开始的任务
逆推dp
dp[i]表示从i~n分钟拥有的最大空暇时间
if(当前时间点没有任务)
dp[i]=dp[i+1]+1;
else
dp[i]=dp[i-t];
1.如果当前时间点没有任务,那么肯定是前一时间点的空闲时间加一
2.如果当前时间点有任务,那么从这个时间点开始t时间内都是不空闲的
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int dp[100000];
vector<int> ve[100000];
int n,k;
int main(){
cin>>n>>k;
for(int i=0;i<k;i++){
int x,y;
cin>>x>>y;
ve[x].push_back(y);
}
for(int i=n;i>=1;i--){
if(ve[i].empty()){//当前时间点没有任务
dp[i]=dp[i+1]+1;
}else{
for(int j=0;j<ve[i].size();j++){//挑选空闲时间最大的
dp[i]=max(dp[i],dp[i+ve[i][j]]);
}
}
}
printf("%d",dp[1]);
return 0;
}