假设有n个cube, 那么有f(n)种危险的情况。
从左往右看,讨论前几位的情况:
L 那么有 f(n-1)
UL 那么有 f(n-2)
UUL 那么有 f(n-3)
UUUL 那么有 2^(n-4)
UUUUL 那么有 2^(n-5)
。。。。。。
所以, f(n)=f(n-1)+f(n-2)+f(n-3)+2^(n-4)...+1 (4<=n<=30)
这里的+1是 指全是U的情况。
弱弱地贴出下面的AC代码。
#include <iostream>
using namespace std;
const int maxsize=30;
long long int a[maxsize+5];
long long int two[maxsize+5];
void CalTwo()
{
two[0]=1;
for (int i =1; i<=maxsize-4; i++){
two[i]=two[i-1]<<1;
}
}
void calculate()
{
a[0]=0;
a[1]=0;
a[2]=0;
a[3]=1;
CalTwo();
for (int i = 4; i <= maxsize; i++){
for (int k = 1; k <= i; k++){
if (k <= 3){
a[i]+=a[i-k];
}
else {
a[i]+=two[i-k];
}
}
a[i]+=1;
}
}
int main()
{
int n;
calculate();
while(cin>>n && n!=0){
cout<<a[n]<<endl;
}
return 0;
}