其实很简单:我们用一个二维数组来表示这个过程,用0表示在A,用1表示在B,用2表示在C,
然后我只要分析每次从那来就行,比如说,在B,我们可以从A来,也可以从C来,
这样就能一一推出来了
O(∩_∩)O哈哈~
http://acm.hdu.edu.cn/showproblem.php?pid=2154
#include<iostream>
using namespace std;
int main()
{
int i,a[1001];
a[0]=a[1]=0;
a[2]=2;
for(i=3;i<1001;++i) a[i]=(a[i-1]+a[i-2]*2)%10000;
while(scanf("%d",&i)!=EOF && i)
{
printf("%d/n",a[i]);
}
return 0;
}
下面用另一种方法
#include <iostream>
using namespace std;
int main()
{
int f[1100][3];
f[2][0] =2;
f[2][1] = 1;
f[2][2] = 1;
for(int i=3;i<=1000;i++)
{
f[i][0] = (f[i-1][1]+f[i-1][2])%10000;
f[i][1] = (f[i-1][0]+f[i-1][2])%10000;
f[i][2] = (f[i-1][0]+f[i-1][1])%10000;
}
int n;
while(cin>>n&&n)
{
cout<<f[n][0]<<endl;
}
return 0 ;
}