ZZULIOJ-2905

新生邀请赛A

题目描述

madoka的面前有n级台阶,目前她处于第0级台阶,她每一次可以选择选择爬一级台阶或是连爬两级台阶,madoka想知道她有几种到达第n级台阶的走法。出乎意料的是,n级台阶中有k级台阶被损坏了,madoka无法抵达这些被损坏的台阶。

输入

第一行输入一个正整数T,表示测试样例数。

对于每个测试样例,共两行,第一行给出两个正整数n,k,表示台阶的级数以及损坏的台阶数。

第二行给出k个正整数ai,表示第ai级台阶被损坏。

1 <= T <= 10

1 <= n <= 105

1 <= k,ai <= n

输出

对于每个测试样例,输出一个正整数,表示madoka到达第n级台阶的方法数。

答案对1000000007取模。

样例输入 Copy

2
3 1
1
3 3
1 2 3

样例输出 Copy

1
0
#include <iostream>
#include <cstring>
using namespace std;
int a[100010],o[100010];//a用来存方法数  o用来存坏的台阶
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		memset(a,0,sizeof a);//一定要数组清零 记得加头文件
		memset(o,0,sizeof o);
		int n,k,num=0;
		cin >> n >> k;
		while(k--)
		{
			int l;
			cin >> l;
			o[l]=1;//将所有的坏的台阶都标记
		}
		a[0]=1;//类似斐波那契  得先定义一个数然后递推
		for(int i=1;i<=n;i++)
		{
			if(o[i]>0) continue;//遇见坏台阶就跳过
			else a[i]=a[i-1]+a[i-2];//跳台阶推导
			a[i]%=1000000007;
		}
		cout << a[n] << endl;
	}
	
	
}

 参考跳台阶推导:(15条消息) 面试题经典:跳台阶问题_leo115的专栏-CSDN博客_跳台阶问题https://blog.csdn.net/leo115/article/details/8039962?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164725793516781683998182%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164725793516781683998182&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-8039962.142%5Ev2%5Epc_search_result_cache,143%5Ev4%5Eregister&utm_term=%E8%B7%B3%E5%8F%B0%E9%98%B6&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值