DP问题,我是按照边排序的,排序既要考虑x也要考虑y,同时在每个面中,长宽也要有序。还有注意状态转移,当前高度并不是之前的最大block叠加的高度,而是可叠加最大高度+当前block高度或者是当前block高度。最后,n^2的复杂度。

#include <stdio.h>
#include <stdlib.h> #define MAXTYPE 33
#define MAXNUM 3*MAXTYPE typedef struct {
int x, y, z;
} rect; rect rects[MAXNUM];
int heights[MAXNUM]; int comp(const void *a, const void *b) {
if ( ((rect *)a)->x - ((rect *)b)->x )
return ((rect *)a)->x - ((rect *)b)->x;
else
return ((rect *)a)->y - ((rect *)b)->y;
} void addOth(int i) {
int tmp;
int x = rects[i].x;
int y = rects[i].y;
int z = rects[i].z; //
tmp = (y<z) ? y:z;
rects[i+].x = tmp;
rects[i+].y = y+z-tmp;
rects[i+].z = x; //
tmp = (x<z) ? x:z;
rects[i+].x = tmp;
rects[i+].y = x+z-tmp;
rects[i+].z = y; //
tmp = (x<y) ? x:y;
rects[i].x = tmp;
rects[i].y = x+y-tmp;
} int mymax(int a, int b) {
return a>b ? a:b;
} int main() {
int n, total;
int i, j, tmp;
int case_n = ; while (scanf("%d", &n)!=EOF && n) {
case_n ++; for (i=; i<*n; i=i+) {
scanf("%d %d %d", &rects[i].x, &rects[i].y, &rects[i].z);
addOth(i);
} total = *n;
qsort(rects, total, sizeof(rect), comp); /*
for (i=0; i<total; ++i)
printf("%d: %d, %d, %d\n", i, rects[i].x, rects[i].y, rects[i].z);
*/ heights[] = rects[].z;
for (i=; i<total; ++i) {
tmp = ;
for (j=i-; j>=; --j) {
if (rects[j].x<rects[i].x && rects[j].y<rects[i].y && heights[j]>tmp)
tmp = heights[j];
}
heights[i] = mymax(tmp+rects[i].z, rects[i].z);
} tmp = ;
for (i=; i<total; ++i) {
if (heights[i] > tmp)
tmp = heights[i];
} printf("Case %d: maximum height = %d\n", case_n, tmp);
} return ;
}

【HDOJ】1069 Monkey and Banana的更多相关文章

  1. 【HDOJ】1512 Monkey King

    左偏树+并查集.左偏树就是可合并二叉堆. /* 1512 */ #include <iostream> #include <string> #include <map&g ...

  2. HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)

    HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...

  3. HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...

  4. HDU 1069 Monkey and Banana dp 题解

    HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...

  5. 【转】Android Monkey 命令行可用的全部选项

    常规 事件 约束限制 调试 原文参见:http://www.douban.com/note/257030384/ 常规 –help 列出简单的用法. -v 命令行的每一个 -v 将增加反馈信息的级别. ...

  6. HDU 1069—— Monkey and Banana——————【dp】

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. HDU 1069 Monkey and Banana(二维偏序LIS的应用)

    ---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  8. HDU 1069 Monkey and Banana (DP)

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. hdu 1069 Monkey and Banana

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. ### 学习《C++ Primer》- 8

    Part 8: 面向对象(第15章) // @author: gr // @date: 2015-01-09 // @email: forgerui@gmail.com 一.OOP 面向对象程序设计的 ...

  2. 03链栈_LinkStack--(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  3. 2.2_线性表的顺序存储结构_参考集合ArrayList

    [线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码 C语言版] #define MAXSIZE 20 /*存储空间初始分配量*/ typed ...

  4. Putty + Vim + Color

    Putty + Vim + Color 参考: 1.Using colour schemes with vim and putty 2.Putty的颜色 3.Custom PuTTY Color Th ...

  5. N的N次方(高校俱乐部)

    最近一直在刷字符串和线段树,也越来越少玩高校俱乐部,无聊看到一题N的N次方的问题,脑海中各种打表就涌现出来了. 弄了不一会儿,就写完了,马上提交,但是系统好像出了问题,提示"哦哦,出了点状况 ...

  6. Visual Studio 2010下载 + 附破解方法

    Visual Studio 2010下载 + 附破解方法 1.Microsoft Visual Studio 2010下载 旗舰版(Ultimate) http://download.microsof ...

  7. Markdown语法备忘

    标题 标题 标题是每篇文章都需要也是最常用的格式,在 Markdown 中,如果一段文字被定义为标题,只要在这段文字前加 # 号即可. # 一级标题 ## 二级标题 ### 三级标题 以此类推,总共六 ...

  8. 《C和指针》读书笔记——第三章 数据

    1.typedef:为各种数据类型定义新名字 typedef char  *ptr_to_char; ptr_to_char a;//声明a是一个指向字符的指针. 2.链接属性:extern;stat ...

  9. python编程语言 函数的形参

    python编程语言 函数的形参的讲解: 我在交互模式中写了个函数: def adder(**args): sum=0 for x in args.keys(): sum+=args[x] retur ...

  10. Git常用命令汇总

    1.初始化相关 git init 初始化仓库 git remove add origin url 添加仓库地址 git remove rm origin 删除仓库地址 git clone 克隆别人的分 ...