uva 103 Stacking Boxes(DAG)
来源:互联网 发布:微博个性域名二次更改 编辑:程序博客网 时间:2024/04/29 20:48
题目连接:103 - Stacking Boxes
题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体。
解题思路:可以将每个立体的w边安照从小到大排序, 比较的时候逐一比较就可以判断出可否嵌套, 然后就是纯DAG问题了。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 50;int n, w, dp[N], vis[N], seq[N][N];void Init() { memset(dp, 0, sizeof(dp)); memset(vis, 0, sizeof(vis)); memset(seq, 0, sizeof(seq));}void read() { for (int i = 0; i < n; i++) {for (int j = 0; j < w; j++) scanf("%d", &seq[i][j]);sort(seq[i], seq[i] + w); }}bool judge(int a, int b) { for (int i = 0; i < w; i++)if(seq[a][i] <= seq[b][i]) return false; return true;}int find(int d) { if (dp[d])return dp[d]; for (int i = 0; i < n; i++) {if (judge(i, d)) { int a = find(i); if (a > dp[d]) {dp[d] = a;vis[d] = i; }} } return ++ dp[d];}void solve() { int Max = 0, id, a; for (int i = 0; i < n; i++) {a = find(i);if (a > Max) { Max = a; id = i;} } printf("%d\n", Max); for (int i = 1; i < Max; i++) {printf("%d ", id + 1);id = vis[id]; } printf("%d\n", id + 1);}int main() { while (scanf("%d%d", &n, &w) == 2) {Init();read();solve(); } return 0;}
- uva 103 Stacking Boxes(DAG)
- uva 103 Stacking Boxes (DAG)
- UVA 103 Stacking Boxes (DAG上的动态规划)
- uva 103 - Stacking Boxes DAG最长路
- UVa 103 Stacking Boxes (DP&DAG)
- uva 103 Stacking Boxes(DAG上的最长路径)
- UVA 103 Stacking Boxes(DAG 上的最长路及其字典序输出)
- UVa 103 Stacking Boxes
- UVA 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- uva 103 Stacking Boxes
- [UVA 103] Stacking Boxes
- uva:103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVA - 103 Stacking Boxes
- uva 103 - Stacking Boxes
- UVA 103 Stacking Boxes
- UVa 103 - Stacking Boxes
- smartupload.jar 实现文件上传下载
- SSO跨域解决方案
- Linux 进程间通信 信号
- 定义参数
- Hibernate特殊查询与更新
- uva 103 Stacking Boxes(DAG)
- Android App 内存泄漏检查工具MAT
- android 中如何分析内存泄漏
- 时钟组件
- 【分享】我在名牌大学毕业后的经历
- 进度条组件:ProgressBar
- 电脑主机板刷bios、后无法获取网络ip的设置
- DB Query Analyzer 5.04 is released, 63 articles concerned have been published
- 异歩处理工具类