本题思路是一个组合乘以一个错排。
2 2 2 3 2
1 3
代码:
import java.util.*; public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); int d=cin.nextInt(); for(int i=0;i<d;i++){ int n=cin.nextInt(); int m=cin.nextInt(); long a[]=new long[30]; for(int j=4;j<=23;j++){ a[2]=1; a[3]=2; a[j]=(j-1)*(a[j-1]+a[j-2]); } long h=1,k=1,f=1,z; if(n>m){ for(int j=1;j<=n;j++) h=h*j; for(int j=1;j<=m;j++) k=k*j; for(int j=1;j<=n-m;j++) f=f*j; z=h/(k*f); } else z=1; System.out.println(z*a[m]); } } }
原文地址:http://blog.csdn.net/amx50b/article/details/46359205