UVA - 103 Stacking Boxes(DAG最长路)
2017-07-21 11:35
295 查看
题目大意:k 个 n 维图形,给出边长。对于 A、B 两个图形,若能找到任意一个顺序使得 A 的每条边都小于 B,则 A 可以嵌套在 B 里。问最多能嵌套几个,并输出嵌套顺序。
解题思路:边长排序一下就很容易判断能不能嵌套,把可以嵌套的两个图形做一条有向边,用临接矩阵表示即G[i][j] = 1,然后就是求 DAG 最长路。套一下小白的模板,其实不是很理解= =
rearranged - 重新安排。
一开始没注意到这个词,以为边长顺序不能重排,写了一堆样例都跑不出来……
解题思路:边长排序一下就很容易判断能不能嵌套,把可以嵌套的两个图形做一条有向边,用临接矩阵表示即G[i][j] = 1,然后就是求 DAG 最长路。套一下小白的模板,其实不是很理解= =
rearranged - 重新安排。
一开始没注意到这个词,以为边长顺序不能重排,写了一堆样例都跑不出来……
#include<iostream> #include<stdio.h> #include<algorithm> #include<cmath> #include<string.h> #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) const int INF = 0x3f3f3f3f; const int NINF = -INF -1; const int MAXN = 35; using namespace std; int k, n, bg; int arr[MAXN][MAXN], d[MAXN]; bool G[MAXN][MAXN]; bool isnest(int a, int b) { for (int i = 0; i < n; i++) if (arr[a][i] >= arr[b][i]) return false; return true; } int dp(int i) { int& ans = d[i]; if (ans > 0) return ans; ans = 1; for (int j = 0; j < k; j++) if (G[i][j]) ans = max(ans, dp(j)+1); return ans; } void print_ans(int i) { if (i == bg) printf("%d", i+1); else printf(" %d", i+1); for (int j = 0; j < k; j++) if (G[i][j] && d[i] == d[j]+1) { print_ans(j); break; } } int main() { while (scanf("%d%d", &k, &n) != EOF) { for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) scanf("%d", &arr[i][j]); sort(arr[i], arr[i]+n); } memset(G, false, sizeof(G)); memset(d, 0, sizeof(d)); for (int i = 0; i < k; i++) for (int j = 0; j < k; j++) if (i != j && isnest(i, j)) G[i][j] = true; int ans = 0; bg = -1; for (int i = 0; i < k; i++) { d[i] = dp(i); if (d[i] > ans) { ans = d[i]; bg = i; } } printf("%d\n", ans); print_ans(bg); printf("\n"); } return 0; }
相关文章推荐
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
- uva 103 - Stacking Boxes DAG最长路
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
- uva 103 - Stacking Boxes
- Uva 103-Stacking Boxes(DP/矩形嵌套)
- UVa 103 Stacking Boxes --- DAG上的动态规划
- [动态规划]UVA103 - Stacking Boxes
- UVA 103 Stacking Boxes
- UVA - 103 Stacking Boxes
- UVA 103--- Stacking Boxes
- uva 103 Stacking Boxes
- uva 103 - Stacking Boxes
- uva103 - Stacking Boxes(DAG)
- UVa 103 - Stacking Boxes (LIS,打印路径)
- UVA 103 Stacking Boxes(DAG 上的最长路及其字典序输出)
- UVA 103 Stacking Boxes 堆砌盒子(DP)
- UVA 103 Stacking Boxes --LIS
- uva 103 - Stacking Boxes
- UVA 103 (Stacking Boxes)
- uva 103 Stacking Boxes(DAG上的最长路径)