uva103 - Stacking Boxes(DAG)
来源:互联网 发布:嵌入式linux常用命令 编辑:程序博客网 时间:2024/05/22 08:25
题目:uva103 - Stacking Boxes(DAG)
题目大意:给出N个boxes, 并且给出这些箱子的维度,要求找一个最长的序列,能够使得下面的箱子一定能够有个维度序列大于上面的那个箱子的维度序列。例如:A箱子(2 3 4),B箱子(3 4 5),因为有个序列2 3 4 , 3 4 5使得B每个维度的值都大于A,所以A可以在B上面 。
解题思路:DAG。将这些箱子哪个能在哪个上面处理出有向图出来,这里判断是否可以在上面的情况,只要将这两个箱子的维度都从小到大排下序,然后比较一下是否对应的位置的值要不都比另一个小就可以了。
例如 :
31 4 18 8 27 17
44 32 13 19 41 19
排序
4 8 17 18 27 31
13 19 19 32 41 44
发现上面的数字比下面的对应位置的数字小,就可以。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 35;const int M = 15;int n, m;int box[N][M];int G[N][N];int f[N][N];int path[N][N];bool judge (int a, int b) {for (int i = 0; i < m; i++)if (box[a][i] >= box[b][i])return false;return true;}void handle () {memset (G, 0, sizeof (G));for (int i = 0; i < n; i++)for (int j = 0; j < n; j++) {if (i == j)continue;if (judge(i, j))G[i][j] = 1;}}void init () {for (int i = 0; i <= n; i++)for (int j = 0; j <= n; j++)f[i][j] = -1;}int dp (int x, int y) {int& ans = f[x][y];int temp;if (ans != -1)return ans;for (int i = 0; i < n; i++)if (G[y][i]) {temp = dp(y, i) + 1;if (temp > ans) {ans = temp;path[x][y] = i;}}if (ans == -1) {ans = 2;path[x][y] = -1;}return ans;}void printf_ans(int x, int y) {if (path[x][y] == -1)return;printf (" %d", path[x][y] + 1);printf_ans(y, path[x][y]);}int main () {while (scanf ("%d%d", &n, &m) != EOF) {for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)scanf ("%d", &box[i][j]);for (int i = 0; i < n; i++)sort (box[i], box[i] + m);handle ();init();int ans = 1;int temp;int x, y;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)if (G[i][j]) {temp = dp(i, j);if (temp > ans) {ans = temp;x = i;y = j;}}printf ("%d\n", ans);if (ans != 1) { printf("%d %d", x + 1, y + 1);printf_ans(x, y);} elseprintf ("1");printf ("\n");}return 0;}
0 0
- uva103 - Stacking Boxes(DAG)
- UVa103 - Stacking Boxes
- [动态规划]UVA103 - Stacking Boxes
- Uva103 Stacking Boxes 贪心 深搜 +DP思想
- DP-DAG uva_103 Stacking Boxes
- uva103 - Stacking Boxes(动归,记忆化搜索)
- 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 (DAG上的动态规划)
- Stacking Boxes
- Stacking Boxes
- DP 练习 uva103 Stacking Boxs
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
- UVA 103 Stacking Boxes(DAG 上的最长路及其字典序输出)
- Spring:探测访问网站的设备类型
- 【算法导论学习-21】单链表(single linked)的反转
- 手机游戏开发如何选择和优化图像素材?
- 嵌入式裸机开发学习:对.lds连接脚本文件的分析
- c++ 转型为 引用类型 的作用
- uva103 - Stacking Boxes(DAG)
- Android Handler 异步消息机制
- Google custom search ——直接使用代码
- 【BZOJ】【P1081】【SCOI2005】【超级格雷码】【题解】【乱搞】
- python join 和 split
- win8/win8.1完美解决系统安装VC6.0安装问题
- 【容斥原理】 HDOJ 4135 Co-prime
- Failed to install helloworld.apk on device '????????????': adb rejected instal
- Julia:V0.3.0 正式发布,好消息!