小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_-
现在就请你帮帮他,算出总共有多少跳法。
跳两次时,从A到A,方法只有2次,从B到A,方法只有1次,从C到A,方法也只有1次;
跳三次时,从A到A,方法只有2次,从B到A,方法只有3次,从C到A,方法也只有3次;
跳四次时,从A到A,方法只有6次,从B到A,方法只有5次,从C到A,方法也只有5次;
.
.
.
由此可知,跳的时候可以得到以下关系
a=max(a,b+c);
b=max(b,a+c);
c=max(c,a+b);
代码如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,j,k,a,b,c,l,s;
while(scanf("%d",&n),n!=0)
{
a=0;
b=1;
c=1;//第一次的情况
for(i=2;i<=n;i++)
{
k=b+c;
j=a+c;
l=b+a;//将每次的情况存储一下
a=max(a,k);//更新状态
if(a>10000)
{
a=a%10000;//取模
}
b=max(b,j);
if(b>10000)
{
b=b%10000;
}
c=max(c,l);
if(c>10000)
{
c=c%10000;
}
}
printf("%d\n",a);
}
return 0;
}