UVA - 103 Stacking Boxes
2014-11-20 19:14
405 查看
题目大意:有 n 个 w 维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的 w 条边可以分别对应大于内层立体
解题思路:可以将每个立体的 w 边安照从小到大排序, 比较的时候逐一比较就可以判断出可否嵌套, 然后就是纯DAG 问题了
解题思路:可以将每个立体的 w 边安照从小到大排序, 比较的时候逐一比较就可以判断出可否嵌套, 然后就是纯DAG 问题了
#include <cstdio> #include <algorithm> using namespace std; int n, w; struct Box { int Dime[15]; int order; int next; } box[35]; int cmp(Box a, Box b) { for (int i = 0; i < w; i++) if (a.Dime[i] != b.Dime[i]) return a.Dime[i] > b.Dime[i]; return 0; } int CMP(Box a, Box b) { for (int i = 0; i < w; i++) if (a.Dime[i] >= b.Dime[i]) return 0; return 1; } int main() { while (scanf("%d%d", &n, &w) != EOF) { for (int i = 0; i < n; i++) { for (int j = 0; j < w; j++) scanf("%d", &box[i].Dime[j]); sort(box[i].Dime, box[i].Dime + w); box[i].order = i; } sort(box, box + n, cmp); int DP[35] = {0}, MAX = 0, ans; for (int i = 0; i < n; i++) { int now = 0; for (int j = 0; j < i; j++) if (CMP(box[i], box[j]) && DP[j] > now) { now = DP[j]; box[i].next = j; } DP[i] = now + 1; if (DP[i] > MAX) { MAX = DP[i]; ans = i; } } printf("%d\n%d", MAX, box[ans].order + 1); while (--MAX) { ans = box[ans].next; printf(" %d", box[ans].order + 1); } printf("\n"); } return 0; }
相关文章推荐
- uva 103 - Stacking Boxes
- UVA 103 (Stacking Boxes)
- uva 103 - Stacking Boxes
- Uva103 Stacking Boxes 贪心 深搜 +DP思想
- uva 103 Stacking Boxes
- uva 103 - Stacking Boxes
- UVA 103 Stacking Boxes
- uva103Stacking Boxes——dp
- UVA - 103 Stacking Boxes
- UVA 103 Stacking Boxes 堆砌盒子(DP)
- uva 103 - Stacking Boxes
- uva103 - Stacking Boxes(DAG)
- 【解题报告】uva103_Stacking Boxes(堆砌盒子, dp)
- UVA 103 Stacking Boxes
- UVa 103 - Stacking Boxes (LIS,打印路径)
- UVA_103 Stacking boxes(DP)
- uva 103 Stacking Boxes dfs,记忆化
- uva 103 Stacking Boxes(DAG上的最长路径)
- uva_103_Stacking Boxes
- uva 103 - Stacking Boxes