LGP 1280
题面略
对于这道题我们首先可以想到
f[i] 表示在i时间下的最大休息时间
但我并不能想到一个合理的转移方程
所以在机房大佬的帮助下
我们可以发现在正序下很难转移
所以我们就可以倒序做
lan_m第一次做倒叙DP (除了背包)
f[i] = f[i+1] + 1;
f[i] = max( f[i - v[i][j]] );
/***********************************************************
> File Name: LGP1280.cpp
> Author: lan_m
> QQ: 2867930696
> Created Time: 2021/9/7 19:41:12
> Modified Time:2021/9/7 19:41:12
> fighting for night
*******************************************************/
#include <bits/stdc++.h>
using namespace std;
int n,k;
const int N = 100100;
vector<int>v[N];
int f[N];
int main(){
scanf("%d%d",&n,&k);
for(int i = 1;i <= k;i ++){
int x,y;scanf("%d%d",&x,&y);
v[x].push_back(y);
}
f[n] = 0;
for(int i = n;i >= 1;i --){
if(v[i].size() == 0){
f[i] = f[i+1] + 1;
}
else {
for(int j = 0;j < v[i].size();j ++){
f[i] = max(f[i + v[i][j]],f[i]);
}
}
}
printf("%d",f[1]);
return 0;
}