理解:一棵树,把有问题的树枝去掉,问剩下多少树枝
状态转移方程就是斐波那契额数列,这里因为有楼梯坏掉进行跳过,是变式
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
const int p=1e9+7;
int n,M;
bool broken[N];
long long dp[N];
int main()
{
cin>>n>>M;
//破损条件
for(int i=1;i<=M;i++)
{
int x;
cin>>x;
broken[x]=true;
}
//dp[]数组
dp[0]=1;
if(!broken[1])dp[1]=1;
for(int i=2;i<=n;i++)
{
if(broken[i]==1)continue;
dp[i]=(dp[i-1]+dp[i-2])%p;
}
cout<<dp[n]<<'\n';
return 0;
}