HDU 1069 Monkey and Banana DP LIS

原创 2013年12月03日 21:32:21

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


题目大意

一群研究员在研究猴子的智商(T T禽兽啊,欺负猴子!!!),他们决定在房顶放一串香蕉,并且给猴子n种砖块。

砖块长宽高分别为xyz,每一种可以取任意个,并且他们可以随意的摆放。

然后要求堆叠起来的砖块上面的必须严格小于下面的。

求最大可以堆叠的高度。


思路:

转化为LIS问题,把每一种摆放方法如(10,20,30)(可以以20 30 作为底,10作为高)都放进数组,然后就是求最大上升子序列。

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=200;
struct data
{
    int x,y;
    int h;
}a[MAXN];
bool operator <(const data &a,const data &b)
{
    return a.x<b.x;
}
int main()
{
    int n;
    int kase=1;
    while(scanf("%d",&n),n)
    {
        int len=0;
        int x,y,z;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            a[len].x=x;    a[len].y=y;     a[len++].h=z;
            a[len].x=x;    a[len].y=z;     a[len++].h=y;
            a[len].x=y;    a[len].y=x;     a[len++].h=z;    
            a[len].x=y;    a[len].y=z;     a[len++].h=x;    
            a[len].x=z;    a[len].y=x;     a[len++].h=y;    
            a[len].x=z;    a[len].y=y;     a[len++].h=x;    
        } 

        sort(a,a+len);

        int dp[MAXN];
        for(int i=0;i<len;i++)
        {
            dp[i]=a[i].h;
            int temp=0;
            for(int j=0;j<i;j++)
            {
                if(a[i].x>a[j].x && a[i].y >a[j].y)
                    temp=max(temp,dp[j]);
            }
            dp[i]+=temp;
        }
        int ans=0;
        for(int i=0;i<len;i++)
            ans=max(ans,dp[i]);
        
        printf("Case %d: maximum height = %d\n",kase++,ans);
    }

    return 0;
}


相关文章推荐

hdu 1069 Monkey and Banana 再来一波DP啦~~LIS的变形,会最大上升子序列就可以A啦~

A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a bana...

HDU 1069 Monkey and Banana LIS变形

点击打开链接题目链接 Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K...

hdu(1069)——Monkey and Banana(LIS变形)

题意: 现在给你n个石块,然后它由坐标来表示(x,y,z)。但是它可以有不同的方法,也就是说它的三个坐标可以轮换着来的。 石块的数量不限,但是每次都必须保持上底面的长和宽严格递减,然后问你用这些石块所...

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

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

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

http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:有n种类型的木块,木块是长方体,已知每种长方体的长宽高,且每种木块的数量是无限的。问这些木块能够摞...

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

HDU 1069 Monkey and Banana dp类型:最长上升子序列

题意:给你一些规格的箱子(无限个),现在让你把箱子堆起来,求最高能有多高。上面的箱子长宽都要严格小于下面的箱子。 思路:一个箱子有6种放法,排序后就模拟最长递增子序列的dp方法就行。dp入门题。...

C - Monkey and Banana 【hdu 1069 dp】

hdu1069 一组研究人员正在设计一项实验,以测试猴子的智商。他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子。如果猴子足够聪明,它应当能够通过合理的放置一些砖块建立一个塔...

hdu 1069 Monkey and Banana(简单dp)

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
  • opm777
  • opm777
  • 2014年01月22日 19:55
  • 978

hdu 1069 Monkey and Banana(dp)

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1069 Monkey and Banana DP LIS
举报原因:
原因补充:

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