Uva - 103 - Stacking Boxes
来源:互联网 发布:淘宝培训教程视频网站 编辑:程序博客网 时间:2024/05/31 18:48
题意:有k个n维的东东,对于其中的两个,如果其中的一个东东的每一维都大于另一个东东的其中一维,那么就说可以嵌套它,求这k个东东互相嵌套的最长路径。
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=114&problem=39
——>>一个东东能嵌套另一个东东,则其n维元素排序后一定是每一维的元素都比另一个东东n维排序后的每一维元素都要大。
排序,建好图,记忆化搜索一次。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Box{ int demension; int e[20]; bool operator < (const Box& b) const { for(int i = 1; i <= demension; i++) if(e[i] >= b.e[i]) return 0; return 1; } void boxSort() { sort(e+1, e+1+demension); }};int f[40], k;int G[40][40];Box box[40];int dp(int i){ int& ans = f[i]; if(ans > 0) return ans; ans = 1; for(int j = 1; j <= k; j++) if(G[i][j]==1) ans = max(ans, dp(j)+1); return ans;}void print(int i){ for(int j = 1; j <= k; j++) if(G[i][j] && f[i] == f[j]+1) { printf(" %d", j); print(j); break; }}int main(){ int n, i, j; while(~scanf("%d%d", &k, &n)) { for(i = 1; i <= k; i++) { for(j = 1; j <= n; j++) { scanf("%d", &box[i].e[j]); box[i].demension = n; } box[i].boxSort(); } memset(G, 0, sizeof(G)); for(i = 1; i <= k; i++) //建图 for(j = 1; j <= k; j++) if(box[i] < box[j]) G[i][j] = 1; memset(f, 0, sizeof(f)); for(i = 1; i <= k; i++) dp(i); //dp求解 int id = 1; for(i = 2; i <= k; i++) //找最长路 if(f[i] > f[id]) id = i; printf("%d\n", f[id]); printf("%d", id); print(id); printf("\n"); } return 0;}
- 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
- 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
- 推荐一个C#代码混淆器 .NET Reactor
- 为什么要加#include "stdafx.h"
- linux中inittab文件详解
- 判断基于对话的程序是开机启动还是双击运行的
- C#如何彻底关闭自已,退出子线程?
- Uva - 103 - Stacking Boxes
- .net 定时执行 windows 服务
- 读取Properties文件
- 用户登录
- 简单剖析Asp.Net MVC 源码中的三个IOC注入点
- TFS 2010 命令行
- 多线程火车票售票系统——人工重置事件对象实现线程同步(会有问题的)
- 20130403
- 表达式判断 帅呆了的题目