这道题题目大意就是:
给定[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; }