题目地址:​​点击打开链接​

思路: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;
}