public class Test { public static void main(String[] args) { for (int i = 1; i < 5; i++) { System.out.println(i+" "+f(i)); } } public static long f(int n) { // if (n == 1) // return 120; // long[] a = new long[n]; // for (int i = 1; i < a.length; i++) { // a[i] = x(i, n - 1); // } // long res = ((2 * n - 1) * (2 * n - 1) * 120 * f(n - 1)) % 1000000007; // for (int i = 1; i < a.length; i++) { // res = (res + a[i] * (4 * (n - 1) * i + i * i) * 120) % 1000000007; // } // return res % 1000000007; //不使用递归 long[] res=new long[n+1]; res[1]=120; for (int i = 2; i < res.length; i++) { //中间结果也需要模,i=4的时候这里就会出现负数 res[i]=(2 * i - 1) * (2 * i - 1) * 120 *res[i-1] % 1000000007; long[] a=new long[i]; for (int j = 1; j < a.length; j++) { a[j]=x(j,i-1); } for (int j = 1; j < a.length; j++) { res[i]=(res[i]+a[j]*(4 * (i - 1) * j + j * j) * 120) % 1000000007; } } return res[n] % 1000000007; } public static long x(int i, int n) { long res = (int) Math.pow(120, n); int k = 0; while (k < i) { res *= (n - k); k++; } int j = 0; while (j <= n - i - 1) { res *= (i + 2 * j + 1) * (i + 2 * j); j++; } return res; } }
点赞 2

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务