题目:
分析:被区间问题限制思维了。
f(i)表示从i时刻开始的最大空暇时间。
有i时刻开始的:f(i)=max(f(i),f(i+t))
无i时刻开始的:f(i)=f(i+1)+1
用一个二维的vector存储。
代码:
#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > vv;
int main()
{
int m,n;
cin>>m>>n;
vector<int> v;
for(int i=0;i<=m+1;i++) vv.push_back(v);
for(int i=0;i<n;i++)
{
int a1,a2;
cin>>a1>>a2;
vv[a1].push_back(a2);
}
int A[m+2];
A[m+1]=0;
for(int i=m;i>=0;i--)
{
A[i]=-1;
if(vv[i].size()==0) A[i]=A[i+1]+1;
for(int j=0;j<vv[i].size();j++) A[i]=max(A[i],A[i+vv[i][j]]);
}
cout<<A[1];
}