P1044 棧 動態規劃 二維dp

題目連接

題意:

給你三個容器,一個輸出層, 一個棧, 一個隊列。一開始隊列有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]);				
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章