題目連接
題意:
給你三個容器,一個輸出層, 一個棧, 一個隊列。一開始隊列有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]);
}
}