取数问题——基础递推

这道题题目大意就是:

给定[1,n],从中取任意个数自然数,但相邻的自然数不能同时取,问一次有多少种取法.

那么这道题我们来设置一下状态.

用f[i]表示前i个数的取法总数.

那么我们可以推出:

f[i]=f[i-1]+f[i-2].

那么代码如下:

#include<bits/stdc++.h>
  using namespace std;
#define rep(i,j,k) for (int i=j;i<=k;i++)
int n;
long long f[51]={0};
inline void into(){
  scanf("%d",&n);
}
inline void work(){
  f[1]=2;
  f[2]=3;
  rep(i,3,n)
    f[i]=f[i-1]+f[i-2];
}
inline void outo(){
  printf("%lld\n",f[n]);
}
int main(){
  into();
  work();
  outo();
  return 0;
}

猜你喜欢

转载自blog.csdn.net/hzk_cpp/article/details/80259136