题意:一个2*n的矩阵,从任意一格出发,不重复且不遗漏地走遍所有格子,问方案数 mo 10^9+7
n<=10000
思路:因为OEIS搜出来的两个数列都是错误的,所以考虑DP
设B[i]为2*i的矩阵,从其中一个角开始走,走遍整个矩阵最后回到同一列的方案数
经打草稿+猜结论得到B[i]=2^(i-1)
设A[i]为2*i的矩阵,从其中一个角开始走,走遍整个矩阵不一定要回到同一列的方案数
推导后得A[i]=B[i]+2*A[i-1]+4*A[i-2]
因为有四个角,所以ANS=a[n]*4
继续考虑从中间开始走的方案数,可以先往左回来再往右,也可以先往右再往左
ANS=ANS+8*sigma(a[i-1]*b[n-i]+b[i-1]*a[n-i])
1 const mo=1000000007; 2 var a,b:array[1..10000]of int64; 3 cas,v,i,n:longint; 4 ans:int64; 5 6 begin 7 assign(input,'hdoj6146.in'); reset(input); 8 assign(output,'hdoj6146.out'); rewrite(output); 9 b[1]:=1; 10 for i:=2 to 10000 do b[i]:=b[i-1]*2 mod mo; 11 a[1]:=1; a[2]:=6; 12 for i:=3 to 10000 do a[i]:=(b[i]+2*a[i-1] mod mo+4*a[i-2] mod mo) mod mo; 13 readln(cas); 14 for v:=1 to cas do 15 begin 16 readln(n); 17 if n=1 then 18 begin 19 writeln(2); 20 continue; 21 end; 22 ans:=a[n]*4 mod mo; 23 for i:=2 to n-1 do 24 ans:=(ans+8*(a[i-1]*b[n-i] mod mo+b[i-1]*a[n-i] mod mo)) mod mo; 25 writeln(ans); 26 end; 27 close(input); 28 close(output); 29 end.