样例都过不去qaq
#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
struct node{
int l,r;
}a[100010];
vector<int> g[10010];//存每个时刻的任务
int f[100010];
//f[x]表示从x时间之后的耗时最小的
int dfs(int x,int sum)//时刻,耗时
{
if(x>n)
return sum;
if(f[x]!=-1)
return f[x];
else
{
if(!g[x].size())//没有任务
return f[x]=dfs(x+1,sum);
else
{
int t=0x3f3f3f3f;
for(int i=0;i<g[x].size();i++)
{
t=min(t,dfs(x+g[x][i],sum+g[x][i]));
}
return f[x]=t;
}
}
}
int main()
{
memset(f,-1,sizeof(f));
cin>>n>>k;
for(int i=1;i<=k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y);
}
cout<<n-dfs(1,0);
return 0;
}