算法竞赛入门经典 例题 9-2 嵌套矩形
2013-06-15 16:30
429 查看
/* 算法竞赛入门经典 例题 9-2 嵌套矩形 * 思路:使用有向无环图 g[i][j]=1表示矩形i可以嵌套在矩形j中 * d[i]表示从i出发的最长路径长度 状态转移方程: d[i] = max{d[j] + 1,d[i]| g[i][j]=1} * */ import java.util.Arrays; import java.util.Scanner; class Rectangle { int w;//矩形宽 int h;//矩形高 public Rectangle(int w, int h) { this.w = w; this.h = h; } } public class EmbedRectangle { static final int MAXN = 20; static Rectangle[] r = new Rectangle[MAXN]; static int[][] g = new int[MAXN][MAXN]; static int[] d = new int[MAXN]; static int n; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while ((n = scanner.nextInt()) > 0) { for (int i = 0; i < n; i++) { int width = scanner.nextInt(); int height = scanner.nextInt(); r[i] = new Rectangle(width, height); } for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if ((r[i].h < r[j].h && r[i].w < r[j].w) || (r[i].w < r[j].h && r[i].h < r[j].w)) { g[i][j] = 1; } else if ((r[i].h > r[j].h && r[i].w > r[j].w) || (r[i].w > r[j].h && r[i].h > r[j].w)) { g[j][i] = 1; } } } Arrays.fill(d, 0);//初始化为0 dp(0); int max = d[0]; int index = 0;//记录最长路径开始位置 for (int i = 1; i < n; i++) { if (d[i] > max) { max = d[i]; index = i; } } System.out.println(max); print_ans(index); } } //记忆搜索程序 private static int dp(int i) { if (d[i] > 0) return d[i]; d[i] = 1; for (int j = 0; j < n; j++) { if (g[i][j] == 1) { d[i] = Math.max(d[i], 1 + dp(j)); } } return d[i]; } //打印程序 private static void print_ans(int i) { System.out.println(r[i].w + " " + r[i].h); for (int j = 0; j < n; j++) { if (g[i][j] == 1 && d[i] == d[j] + 1){ print_ans(j); break; } } } }
相关文章推荐
- DAG上的动态规划 - 算法竞赛入门经典 - 嵌套矩形问题
- 算法竞赛入门经典例题-蚂蚁
- 【算法竞赛入门经典】递归结构的动态规划 例题9-10 UVa1626
- 算法竞赛与入门经典 例题3-4 猜数字游戏的提示
- 算法竞赛入门经典 例题9-1
- UVa 133 算法竞赛入门经典4-3例题(约瑟夫环类型)
- 【算法竞赛入门经典】集合的动态规划;位运算 例题9-15 UVa10817
- 【算法竞赛入门经典】集合的动态规划;时间优化 例题9-16 UVa1252
- 【算法竞赛入门经典】类LCS动态规划;指标函数分解 例题9-7 UVa1625
- 【算法竞赛入门经典】多阶段决策问题 例题9-5 UVa12563
- 算法竞赛入门经典第六章例题6-3 Matrix Chain Multiplication UVA - 442
- 算法竞赛入门经典例题-优先队列(阿格斯)
- 【算法竞赛入门经典】6.4.2用BFS求最短路 例题6-14 UVa816
- 算法竞赛入门经典 第二版 例题11-4 电话圈 Calling Circles uva247
- 算法竞赛入门经典 例题7-3 倒水问题
- 【算法竞赛入门经典】多阶段决策问题 例题9-4 UVa116
- 算法竞赛入门经典训练指南-P4例题3 分金币问题总结
- 【算法竞赛入门经典】DAG上的动态规划 例题9-1 UVa1025
- 算法竞赛入门经典 例题 3-2 蛇形填数
- 【算法竞赛入门经典】7.6 迭代加深搜索与IDA* 例题7-10 UVa11211