HDU 1069(最长下降子序列)
来源:互联网 发布:华为t8300数据恢复 编辑:程序博客网 时间:2024/06/06 10:43
题意:给n种类型的箱子,每种类型提供无限的数量。要求把这些箱子尽量叠高,上一层箱子的长宽必须都比下一层的箱子小,求可以叠的最高高度。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXN 120#define MAX(a, b) ((a) > (b) ? (a) : (b))#define MIN(a, b) ((a) > (b) ? (b) : (a))struct Block{ int x, y, z; Block() {} void add(int _x, int _y, int _z) { z = _z; x = MAX(_x, _y); y = MIN(_x, _y); } bool operator <(const Block& rhs) const { return x < rhs.x && y < rhs.y; }} block[MAXN];bool cmp(const Block& lhs, const Block& rhs){ if (lhs.x == rhs.x) return lhs.y > rhs.y; return lhs.x > rhs.x;}int F[MAXN];int main(){ int n, i, j, x, y, z, max, cases = 0; while (scanf("%d", &n) != EOF && n) { for (i = 0; i < n; ++i) { scanf("%d%d%d", &x, &y, &z); block[i*3].add(x, y, z); block[i*3+1].add(x, z, y); block[i*3+2].add(y, z, x); } n *= 3; sort(block, block+n, cmp); max = F[0] = block[0].z; for (i = 1; i < n; ++i) { F[i] = block[i].z; for (j = 0; j < i; ++j) { if (block[i] < block[j] && F[i] < F[j] + block[i].z) F[i] = F[j] + block[i].z; } max = MAX(F[i], max); } printf("Case %d: maximum height = %d\n", ++cases, max); } return 0;}
0 0
- HDU 1069(最长下降子序列)
- hdu 1069 最长下降子序列
- hdu 1069 monkey and banana(最长下降子序列)
- 最长下降子序列
- 最长下降子序列
- 最长下降子序列
- hdu 1160 FatMouse's Speed( 最长下降子序列 )
- HDU 6197 array array array(最长不下降子序列)
- 最长不下降子序列
- poj1887(最长下降子序列)
- 最长上升下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- POJ1887 最长下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- [转]Linux网络协议栈分析——从设备驱动到链路层
- 质点跟踪在气象矢量场分析中的应用
- 转载:PostgreSQL源码分析之page
- Android的SeekBar自定义样式
- 互联网的那点事:商业模式、开放平台、开放开源标准
- HDU 1069(最长下降子序列)
- Android开发学习之以CameraAPI方式实现相机功能(一)——快速实现相机
- WinCE中公开源代码的编译方法
- VS2005 下使用串口控件进行串口通信的示例
- ASP版MD5加密函数及用法
- Wince下设定线程的优先级 总结
- 第一次输入用二维字符数组,贴一下代码
- Windows CE 6.x驱动程序的新特性
- fork函数