题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93

一堆科学家研究猩猩的智商,给他M种长方体,每种N个。

然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉。

现在给你M种长方体,计算,最高能堆多高。

要求位于上面的长方体的长要大于(注意不是大于等于)下面长方体的长,上面长方体的宽大于下面长方体的宽。

解题:

1、一个长方体,可以有6种不同的摆法。长宽排序,就可以只存下来三种,需要的是高的唯一性。

2、将所有长方体按底面积升序排序。

3、第 i 个长方体的最大值 = 前i个(0到i - 1)长方体所能构成的最大高度 + 自己的高度。(升序是为了保证前 i 个长方体底面积一定≤第 i 个,是有可能摆在第i个上面的。)

转移方程:

4、遍历一遍dp数组,得到最大值。

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;

class block {
public:
    int length, width, height;
    block() {};
    block(int x, int y, int z) {
        length = x; width = y; height = z;
    }
    //按底面积大小升序排序
    bool operator <(block b) const {
        return length * width < b.width* b.length;
    }
}cube[];
];

bool check(block under, block upper) {
    if (under.length > upper.length && under.width > upper.width) return true;
    return false;
}
int main() {
    ;
    while (cin >> n) {
        )break;
        ; i < n; i++) {
            int l, w, h;
            scanf("%d%d%d", &l, &w, &h);
            //长方体的height,length,width分别作高
            cube[i *  + ] = block(l > w ? l : w, l > w ? w : l, h);
            cube[i *  + ] = block(w > h ? w : h, w > h ? h : w, l);
            cube[i *  + ] = block(h > l ? h : l, l > h ? h : l, w);
        }
        sort(cube, cube + n * );

        dp[] = cube[].height;

        ; i < n * ; i++) {
            ;
            ; j < i; j++) {
                if (cube[i].length > cube[j].length && cube[i].width > cube[j].width) {
                    temp = dp[j] > temp ? dp[j] : temp;//找前i个长方体的最大值
                }
            }
            dp[i] = cube[i].height + temp;
        }

        ;
        ; i < n * ; i++) {
            max = dp[i] > max ? dp[i] : max;
        }
        cout << "Case " << k++ << ": maximum height = " << max << endl;
    }
    ;
}

随手练——ZOJ 1093 Monkey and Banana(动态规划)的更多相关文章

  1. 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 ...

  2. ZOJ 1093 Monkey and Banana (LIS)解题报告

    ZOJ  1093   Monkey and Banana  (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  3. HDU——Monkey and Banana 动态规划

                                                                       Monkey and Banana Time Limit:2000 ...

  4. Monkey and Banana 题解(动态规划)

    Monkey and Banana 简单的动态规划 1.注: 本人第一篇博客,有啥不足还请多多包涵,有好的建议请指出.你以为有人读你博客,还给你提意见. 2.原题 Background: A grou ...

  5. HDU 1069 Monkey and Banana(动态规划)

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

  6. Monkey and Banana(HDU 1069 动态规划)

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

  7. HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)

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

  8. hdu1069Monkey and Banana(动态规划)

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

  9. HDU 1069 Monkey and Banana dp 题解

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

随机推荐

  1. java 非阻塞算法实现基础:unsafe类介绍

    一.为什么要有Unsfae.我们为什么要了解这个类 1. java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 2.java的并发包中底层大量的使用这个类的功能 ...

  2. RequestDispatcher.forward转发与HttpServletResponse.sendRedirect重定向

    下面是HttpServletResponse.sendRedirect 方法实现的请求重定向与RequestDispatcher.forward 方法实现的请求转发的总结比较:(1)RequestDi ...

  3. 新建hadoop用户以及用户组,给予sudo权限

    1.首先新建用户,adduser命令 sudo adduser hadoop passwd hadoop 输入密码之后,一路 y 确定. 2.添加用户组 在创建hadoop用户的同时也创建了hadoo ...

  4. Angular 中引入BootStrap

    由于Bootstrap官方目前并没有发布Angular的相关类库进行支持,当前Angular只能引用使用Bootstrap相关的样式.无法使用Bootstrap自带的脚本逻辑.以下以Angular7和 ...

  5. 页面中多个script块之间方法与变量共享问题

    JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享,按顺序执行. 如: <script type='text/javascript'> var m = 0,n = 1, ...

  6. mongodb ISODate问题(大量数据update优化)

    问题描述: 上周有个需求,把mongodb中birthday (ISO日期格式) 转换成北京时间,并保存成string类型. 最初思路: 遍历查找出的结果,逐个加8小时,然后通过_id逐个去updat ...

  7. vue 笔记

    <div id="root"> <div> <input v-model="inputValue" /> <butto ...

  8. JS中判断数据类型的几种方法

    1⃣️首先我们来了解一下js中的数据类型 1.基本数据类型:Undefined.Null.Boolean.Number.String(值类型) 2.复杂数据类型:Object(引用类型) (值类型和引 ...

  9. css BFC布局及用处

    http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 这篇文章讲的很简单很实用

  10. 通过代码动态创建Windows服务

    开发完Windows服务后,一般通过如下命令进行注册Windows服务 @echo off %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\inst ...