动态规划--破损的台阶

#include <iostream>
using namespace std;
const long long int N=1e9+7;
bool a[100006];//是否坏
int f[100006];//到这级台阶的方案数
int main()
{
int n,m;//n个台阶坏了m个台阶
cin>>n>>m;
int p;
for(int i=1;i<=m;i++){
cin>>p;
a[p]=true;
}
f[0]=1;//0级
f[1]=1;//1级
for(int i=2;i<=n;i++ ){
  if(a[i-2]!=true){
f[i]=(f[i]+f[i-2])%N;
  }
  if(a[i-1]!=true){
    f[i]=(f[i-1]+f[i])%N;
  }
  
}

if((n==1&&m==1)||a[n]==true)cout<<0;

  else{
    cout<<f[n];
  }
  // 请在此输入您的代码
  return 0;
}

注意:

(n==1&&m==1)||a[n]==true特判条件:只有一级台阶坏了一级那么输出0,如果最高级坏了就是0种可能。

 

posted @ 2024-01-19 18:45  Annaprincess  阅读(15)  评论(0)    收藏  举报