题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子。

要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明是箱子小于,重载<即可。

然后就是正常的dp最长路的搜索了。

代码:

/*
*  Author:      illuz <iilluzen[at]gmail.com>
*  Blog:        http://blog.csdn.net/hcbbt
*  File:        uva103.cpp
*  Create Date: 2013-09-12 19:32:36
*  Descripton:  dp
*/#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;const int MAXN = 100;struct Box {int dem;int e[30];void Sort() {sort(e, e + dem);}bool operator < (const Box& a) const {for (int i = 0; i < dem; i++)if (e[i] >= a.e[i])return false;return true;}
} b[MAXN];
int big[MAXN][MAXN], k, t;
int dp[MAXN];int solve(int i) {if (dp[i] > 0) return dp[i];dp[i] = 1;for (int j = 0; j < t; j++)if (big[i][j])dp[i] = max(dp[i], solve(j) + 1);return dp[i];
}void output(int i) {for (int j = 0; j < t; j++)if (big[i][j] && dp[i] == dp[j] + 1) {printf(" %d", j + 1);output(j);break;}
}int main() {while (scanf("%d%d", &t, &k) != EOF) {for (int i = 0; i < t; i++) {for (int j = 0; j < k; j++) {b[i].dem = k;scanf("%d", &b[i].e[j]);}b[i].Sort();}memset(big, 0, sizeof(big));memset(dp, 0, sizeof(dp));for (int i = 0; i < t; i++)for (int j = 0; j < t; j++)if (i != j && b[i] < b[j])big[i][j] = 1;for (int i = 0; i < t; i++)solve(i);int tt = 0;for (int i = 0; i < t; i++)if (dp[i] > dp[tt])tt = i;printf("%d\n", dp[tt]);printf("%d", tt + 1);output(tt);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/suncoolcat/p/3331200.html

UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索相关推荐

  1. UVa 103 - Stacking Boxes(dp求解)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  2. UVa 103 - Stacking Boxes

    题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...

  3. UVA 103 Stacking Boxes

    终于完成了啊,这可是我自己独立做的第一道DP题!激动ing--这题在白书里是DAG上的DP,可是我看不懂,比如怎么建图我就不会,所以代码都是自己想的.图我不会建,只好动下脑子,刚开始是想用二维数组保存 ...

  4. 【DP】UVA 103 Stacking Boxes 输出路径

    类似于叠箱子 对于箱子a : (a1,a2,a3),b : (b1,b2,b3) 存在一个顺序ai<bj,ak<bi,aj<bk 就表示a可以到b #include <stdi ...

  5. uva 10285 - Longest Run on a Snowboard(dp+记忆化搜索)

    1.http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UVA - 11361 Investigating Div-Sum Property(数位dp/记忆化搜索板子)

    题目:https://vjudge.net/problem/UVA-11361 思路:数位dp,用记忆化搜索写,dp[pos][i][j][limit] 代表剩余有pos位,每位上的数字和模k 等于i ...

  7. UVA 1220 Party at Hali-Bula (树状DP+记忆化搜索)

    Dear Contestant, I'm going to have a party at my villa at Hali-Bula to celebrate my retirement from ...

  8. POJ - 3160 Father Christmas flymouse DAG最长路

    又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法. DAG最长路,分为两种固定终点和不固定终点. 令dp[i]表示从i顶点出发能 ...

  9. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

最新文章

  1. 基础矩阵,本质矩阵,单应性矩阵讲解
  2. C语言中函数的参数列表为空和void的区别
  3. 【Linux】【服务器】 CentOS7下远程访问mysql数据库_创建用户及授予权限_查看用户、修改密码详细步骤
  4. mybatis中LIKE模糊查询的几种写法以及注意点(亲测第三种CONCAT()函数的)
  5. ip 地址 192.168.1.255 代表( )。_ip地址基础入门知识
  6. AWK再次认识--内置的参数,以及编写脚本
  7. python拆分excel的sheet为单文件_pandas处理excel一个sheet拆分为多个sheet
  8. Java连接Access数据库的那些坑
  9. 95-140-104-源码-transform-算子flatMap
  10. 移动端 js 弹出层内容滚动的时候,不影响body的滚动条处理
  11. 国土空间基础信息平台与时空大数据平台的区别
  12. 智慧城市大数据运营中心及城市大脑综合运行管理平台建设方案WORD
  13. 5分钟快速入门大数据、数据挖掘、机器学习
  14. STM32+W25QXX实现模拟U盘-HAL库
  15. 谈谈第一次Web项目的感想(上)
  16. 智慧工厂之化工厂人员定位系统给化工厂带来了巨大的改变-新导智能
  17. 在线画图工具【高仿rose】方便地画工作流
  18. c#创建word表格 将表格所有内容居中
  19. nginx-基础知识
  20. PHP身份证有效期校验(通用)

热门文章

  1. linux定时工具,Linux定时器工具
  2. 计算机英语文章阅读网站,关于电脑的英语美文阅读
  3. java 滑动窗口_【Java】 剑指offer(59-1) 滑动窗口的最大值
  4. java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
  5. python lambda函数_python入门基础之lambda匿名函数
  6. python datetime datetime_Python datetime.tzinfo方法代碼示例
  7. 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)
  9. vue避免重新渲染_小白也能懂的VUE的生命周期探寻
  10. python代码命令行tab补齐_Python在命令行下Tab键自动补全脚本