题目地址:点击打开链接
思路:a[i] = a[i-1] + a[i-3] + 1
上一个阶段的各种组合+新增的一个能和离他2个格子的各种组合再组成一个新组合+只种新增的这一格
AC代码:
#include <iostream> #include <cstdio> using namespace std; int main() { __int64 n,a[61],i; a[1] = 1; a[2] = 2; a[3] = 3; for(i=4; i<=60; i++) { a[i] = a[i-1] + a[i-3] + 1; } while(scanf("%I64d",&n) != EOF) { printf("%I64d\n",a[n]); } return 0; }