码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1069 Monkey and Banana

时间:2015-11-30 19:58:31      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

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

题目意思:给n种箱子,每种有足够多的箱子,把箱子从下往上叠,要求下面的要比上面的长宽都要大,问最高叠多高。

分析:每种箱子有3种状态,记录完后,简单dp。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

struct node
{
    int x,y,z;
} a[100];

int dp[100];

bool cmp(node a,node b)
{
    if(a.x*a.y>b.x*b.y)
        return true;
    return false;
}

int main()
{
    int n,x1,x2,x3;
    int ii=1;
    while(scanf("%d",&n),n)
    {
        int k=0;
        int d[10];
        for(int i=0; i<n; i++)
        {
            scanf("%d%d%d",&d[1],&d[2],&d[3]);
            //sort(d+1,d+4);
            a[k].x=d[1],a[k].y=d[2],a[k++].z=d[3];
            a[k].x=d[1],a[k].y=d[3],a[k++].z=d[2];
            a[k].x=d[2],a[k].y=d[3],a[k++].z=d[1];
        }
        sort(a,a+k,cmp);
        for(int i=0; i<k; i++)
            dp[i]=a[i].z;

        for(int i=k-2; i>=0; i--)
        {
            for(int j=i+1; j<k; j++)
            {
                if(a[i].x>a[j].x&&a[i].y>a[j].y || a[i].x >a[j].y&&a[i].y>a[j].x)
                    if(dp[i]<dp[j]+a[i].z)
                        dp[i]=dp[j]+a[i].z;
            }
        }
        int Max=dp[0];
        for(int i=1; i<k; i++)
        {
            if(dp[i]>Max)
                Max=dp[i];
        }
        printf("Case %d: maximum height = %d\n",ii++,Max);
    }

    return 0;
}

 

HDU 1069 Monkey and Banana

标签:

原文地址:http://www.cnblogs.com/mengzhong/p/5007826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!