http://acm.hdu.edu.cn/showproblem.php?pid=4475
题目意思:
给定边长为n的正三角形,如图分成单位三角形,然后从顶点出发,到最下层的任一点,问有多少种方案。
其中,防线可以是水平和向下,但不能走回头路。
递推:ans[n]=ans[n-1]*n*2
对于ans[n],考虑ans[n-1]到达第n-1层,第n-1层有n个点,对于每种方案,均可平移至n个点中的任意一个(若为本身,则相当于没动),对于下一步,有左右两种方案。
可以整理得ans[n]=n! * 2^n,所以n>=mod时,答案为0。
最近在练java,所以代码是java的
1 import java.util.*; 2 public class Main { 3 public static void main(String[] args){ 4 Scanner cin=new Scanner(System.in); 5 long[] ans=new long[1000100]; 6 int m=1000003,T=cin.nextInt(); 7 ans[1]=2; 8 for(int i=2;i<m;i++)ans[i]=ans[i-1]*2*i%m; 9 while(T--!=0){ 10 long n=cin.nextLong(); 11 if(n<m) System.out.println(ans[(int)n]); 12 else System.out.println("0"); 13 } 14 cin.close(); 15 } 16 }