题目连接
题意:
给你三个容器,一个输出层, 一个栈, 一个队列。一开始队列有n个数,栈为空。队列向栈中输入值, 问最后有几种输出情况。
题解:
我们可以假设一个二维数组res[i][j];
i表示当前已经进栈的个数,j表示当前已经出栈的个数,res[i][j] 表示当前 i和j 下有多少种情况。
显然根据定义 i >= j.
当i == j时, res[i][j]只能由res[i][j - 1]得出,因为前一态一定是i > j的。
当i > j时, res[i][j] = res[i - 1][j] + res[i][j - 1];
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
long res[][] = new long[20][20];
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
for(int i = 1;i <= n;i++)
res[i][0] = 1;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= i;j++)
if(i == j)res[i][j] = res[i][j - 1];
else res[i][j] = res[i - 1][j] + res[i][j - 1];
System.out.println(res[n][n]);
}
}