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]);				
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章