笔试题算法系列(九)百度2017不等式数列
[编程题] 不等式数列
时间限制:1秒
空间限制:32768K
度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列。但是现在度度熊手中只有k个小于符号即('<'')和n-k-1个大于符号(即'>'),度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。
输入描述:
输入包括一行,包含两个整数n和k(k < n ≤ 1000)
输出描述:
输出满足条件的排列数,答案对2017取模。
输入例子1:
5 2
输出例子1:
66
代码如下:
1 import java.lang.Math; 2 import java.util.Arrays; 3 import java.util.HashMap; 4 import java.util.Scanner; 5 6 public class Main{ 7 public static void main(String[] args){ 8 Scanner sc = new Scanner(System.in); 9 String[] line; 10 while(sc.hasNext()){ 11 line = sc.nextLine().split(" "); 12 int n = Integer.parseInt(line[0]); 13 int k = Integer.parseInt(line[1]); 14 int[][] a=new int[n+1][n+1]; 15 for(int i=1;i<=n;i++){ 16 a[i][0]=1; 17 a[i][i-1]=1; 18 } 19 for(int i=2;i<=n;i++){ 20 for(int j=1;j<=k&&j<i;j++){ 21 a[i][j]=(i-j)*a[i-1][j-1]+(j+1)*a[i-1][j]; 22 a[i][j]%=2017; 23 } 24 } 25 System.out.println(a[n][k]); 26 } 27 sc.close(); 28 } 29 }