小黑跳地毯减肥(递推)
由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥。
小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_-
现在就请你帮帮他,算出总共有多少跳法。
![](http://ccpc.ahu.edu.cn/images/1057.jpg)
小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_-
现在就请你帮帮他,算出总共有多少跳法。
![](http://ccpc.ahu.edu.cn/images/1057.jpg)
程序输入说明
测试输入包含若干测试用例。每个测试用例占一行,表示n的值(1<=n<=1000)。
当n为0时输入结束。
当n为0时输入结束。
程序输出说明
每个测试用例的输出占一行,由于跳法非常多,输出其对10000取模的结果.
程序输入样例
2 3 4 0
程序输出样例
2 2 6
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int a[1005]; 6 int solve(int n){ 7 if(n==1) 8 return 0; 9 else if(n==2) 10 return 2; 11 else if(n==3) 12 return 2; 13 else{ 14 for( int i = 4; i <= n; i++ ) 15 a[i] = (a[i-1]+2*a[i-2])%10000; 16 } 17 return a[n]; 18 } 19 20 int main(){ 21 22 int n; 23 a[1] = 0; 24 a[2] = 2; 25 a[3] = 2; 26 while(cin>>n&&n){ 27 cout<<solve(n)<<endl; 28 } 29 return 0; 30 }