博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva103 - Stacking Boxes(DAG)
阅读量:6291 次
发布时间:2019-06-22

本文共 1868 字,大约阅读时间需要 6 分钟。

题目大意:给出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 
#include
#include
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); } else printf ("1"); printf ("\n"); } return 0;}

转载地址:http://kukta.baihongyu.com/

你可能感兴趣的文章
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>