爆搜
当x==n时,cnt++,然后return,若x>n,return;
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int cnt;
int n;
void f(int x)
{
if(x>n)return;
if(x==n)
{
cnt++;
return;
}
f(x+1);
f(x+2);
}
int main()
{
cin>>n;
f(0);
cout<<cnt;
return 0;
}
dp
其实这道题目我们可以看出来,台阶i的方案等于台阶i-1的方案加上台阶i-2的方案,想要到台阶i,我们可以i-2+2和i-1+1和i-2+1+1,但是i-2+1+1和i-1+1是一样的,可以算作一个方案,所以到达台阶i的方案数就是到达台阶i-1的方案数加上到达台阶i-2的方案数(其实就是斐波那契啦哈哈哈哈)
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 20;
int n;
int dp[N];
int main()
{
cin>>n;
dp[1]=1;
dp[0]=1;
for(int i=2;i<=n;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
cout<<dp[n];
return 0;
}