题目地址:点击打开链接
思路: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;
}