hdoj1069 Monkey and Banana (dp)

原创 2013年12月02日 21:20:06

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069

题意:

一个盒子有长宽高分别为l,w,h;有n类盒子,每一类盒子可用无数次,求它们叠起来的最大高度,叠起来的过程中有条件,第一个盒子上面的盒子的长和宽必须

都要小下面盒子的长和宽,盒子可以翻转。

思路:

第一类盒子最多只有三个盒子可用,则最终有3* n个盒子可用,调整它们长宽高的值使l>=w;

再用sort按l从大到小排序,hi[i]表示前i个盒子可达的最大高度,box[i].h为第i个盒子的高度。

则hi[i]=max(hi[0],hi[1],hi[2],.......hi[i-1]) + box[i].h;

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct Box
{
    int l,w,h;
}box[100];

void swap(int &x,int &y)
{
    int t;
    if(x<y)
    {
        t=x;
        x=y;
        y=t;
    }
}
int cmp(Box A,Box B)
{
    return A.l>B.l;
}
int main()
{
    int n,x,y,z,i,j,ans,cas=1;
    while(scanf("%d",&n)&&n!=0)
    {
        int hi[100]={0};
        ans=0;
        for(i=0;i<n;i++)
        {
             scanf("%d%d%d",&x,&y,&z);
             swap(x,y);
             swap(x,z);
             swap(y,z);
             box[i*3].l=x; box[i*3].w=y; box[i*3].h=z;
             box[i*3+1].l=y;box[i*3+1].w=z;box[i*3+1].h=x;
             box[i*3+2].l=x;box[i*3+2].w=z;box[i*3+2].h=y;
        }
         sort(box,box+3*n,cmp);
        for(i=0;i<3*n;i++)
        {
            int maxn=0;
            for(j=0;j<i;j++)
            {
                if(box[j].l>box[i].l&&box[j].w>box[i].w)
                    if(hi[j]>maxn)maxn=hi[j];
            }
            hi[i]=box[i].h+maxn;
            if(hi[i]>ans)ans=hi[i];
        }
        printf("Case %d: maximum height = %d\n",cas++,ans);
    }
    return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

动态规划入门——Monkey and Banana

转载请注明出处:http://blog.csdn.net/a1dark 分析:题意是堆箱子、要求上面的箱子的长和宽都小于下面箱子的长和宽、由于箱子可以无限放、所以一种箱子有6种情况、然后我们按照其中...
  • verticallimit
  • verticallimit
  • 2013年10月01日 23:15
  • 1333

HDOJ1069 猴子和香蕉【DP】

题目详见http://acm.hdu.edu.cn/showproblem.php?pid=1069 这个题目的大致意思就是香蕉挂在一定的一定的高度,不同的高度都有香蕉。给猴子很N个箱子,有长宽高,...
  • sustliangbo
  • sustliangbo
  • 2013年08月02日 00:27
  • 1467

杭电60道DP问题总结(一)

杭电60道DP问题总结: DP是一个很有艺术的思想。看似简单的背后却隐藏着深刻的含义。 题目连接地址:http://acm.hdu.edu.cn/problemclass.php?id=5...
  • xueerfei008
  • xueerfei008
  • 2013年06月21日 22:59
  • 10237

HDOJ 1069 Monkey and Banana 【DP】

Monkey and BananaTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)...
  • shengweisong
  • shengweisong
  • 2015年03月30日 22:45
  • 637

hdoj1069 Monkey and Banana(DP)

dp[i]代表第i块砖头为顶时的最大高度。 dp[i]=max{dp[j]+b[i].z,dp[i]}。 因为一类砖头可以拿任意块,所以一类砖头最多可以有3种高度。 最后目的是找到一个单挑递减的序列使...
  • CqZtw
  • CqZtw
  • 2017年06月08日 10:47
  • 114

HDOJ 1069 Banana and Monkey

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069   题目大意:求摞砖块的最大高度?已知长宽高的n种砖块,每种砖块的选取数量不限,砖块可以以其...
  • dzyhenry
  • dzyhenry
  • 2013年05月25日 20:25
  • 1456

hdoj 1069 Monkey and Banana(上升子序列最大和)

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
  • CillyB
  • CillyB
  • 2016年08月15日 18:36
  • 207

HDU 1069.Monkey and Banana【动态规划(DP)】【8月15】

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
  • a995549572
  • a995549572
  • 2016年08月15日 16:57
  • 263

hdu 1069 Monkey and Banana(类似最长上升子序列,dp)

题目:monkey想吃banana,但是banana挂在一定的高度,现在有长宽高为,x,y,h的长方体,要你堆成一个台阶让monkey可以踩在上面,要求,上一层的 地面长和宽都要小于下层的,这样mon...
  • wconvey
  • wconvey
  • 2012年04月24日 13:13
  • 501

Monkey and Banana(HDU 1069)解题报告(DP - 滚动数组)

Monkey and Banana(HDU 1069)解题报告(DP - 滚动数组) 一、原题 Monkey and Banana Time Limit:1000MS     Memory Li...
  • Chrome_matrix_68
  • Chrome_matrix_68
  • 2014年08月08日 14:19
  • 630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj1069 Monkey and Banana (dp)
举报原因:
原因补充:

(最多只允许输入30个字)