题意:
有一个跳舞毯,其中有A,B,C三个区域,开始从A,结束为A,求跳n次的种类数。
两种思路:
1
当第i-1次在A时,有dp[i-1],所以第i-1不再A的情况也是dp[i-1](因为i-2次可能在B,可能在C,如果在B,跳到C,在C,跳到B)
当i-2次在A时,dp[i-2]*2
dp[i]=dp[i-1]+2*dp[i-2];
2
A[0]=1;B[0]=C[0]=0;
A[i]=B[i-1]+C[i-1];
B[i]=A[i-1]+C[i-1];
C[i]=A[i-1]+B[i-1];
很简单,都算出来就可以了
#include"stdio.h" #include"string.h" #define N 1101 int A[N]; int B[N]; int C[N]; int main() { int n; int i; A[0]=1; B[0]=0; C[0]=0; for(i=1;i<=1000;i++) { A[i]=B[i-1]+C[i-1]; B[i]=A[i-1]+C[i-1]; C[i]=A[i-1]+B[i-1]; A[i]%=10000; B[i]%=10000; C[i]%=10000; } while(scanf("%d",&n)!=-1,n) printf("%d\n",A[n]); return 0; }
#include"stdio.h" #include"string.h" #define N 1101 int dp[N]; int main() { int n; int i; dp[1]=0; dp[2]=2; for(i=3;i<=1000;i++) { dp[i]=dp[i-1]+dp[i-2]*2; dp[i]%=10000; } while(scanf("%d",&n)!=-1,n) printf("%d\n",dp[n]); return 0; }