zoukankan      html  css  js  c++  java
  • HDU 1069 动态规划(DP) Monkey and Banana

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

    题意:有n(n<=30)种不同的立方体(每种个数不限),  求能够堆多高.

    分析:

    (1) 对于每一种立方体, 假设长,宽,高互不相等, 则它置方法有6种不同的情况(长,宽,高全排列).

    (2)那么,实际可以看成是6*n种不同的立方体.

    (3)对这6*n种立方体长(如果长相等则以宽)小到大排序

    (4)这里就等效于有很多的箱子排成了一列, 看怎么才能将它堆得最高,

    (5)从小的一边开始, 如果后面的箱子上面能放下前面较小的, 就放一个那种小的那些大箱子上.

    (6)然后将这一堆看成一个箱子,只是这个箱子比以前加高了,但底面还是不变.

    (7)重复(6)的操作. 直到最后没有任何位置的箱子可以放到其位置的箱子上面时, 找到最高的那个是答案!

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int maxn=10000;
    
    struct node
    {
        int x,y;
        int h;
    } dp[maxn];
    
    bool cmp(node A, node B)
    {
        if(A.x==B.x) return A.y<B.y;
        return A.x<B.x;
    }
    
    int main()
    {
        int n,cas=1;
        while(cin>>n&&n)
        {
            int N=0;
            for(int i=0; i<n; ++i)
            {
                int a,b,c;
                cin>>a>>b>>c;
                dp[N].x=a, dp[N].y=b, dp[N].h=c, ++N;
                dp[N].x=b, dp[N].y=a, dp[N].h=c, ++N;
                dp[N].x=c, dp[N].y=b, dp[N].h=a, ++N;
                dp[N].x=b, dp[N].y=c, dp[N].h=a, ++N;
                dp[N].x=a, dp[N].y=c, dp[N].h=b, ++N;
                dp[N].x=c, dp[N].y=a, dp[N].h=b, ++N;
            }
            sort(dp,dp+N,cmp);
            int ans=dp[0].h;
            for(int i=1; i<N; ++i)
            {
                int temp=0;
                for(int j=0; j<i; ++j)
                    if( dp[i].x>dp[j].x && dp[i].y>dp[j].y )
                        temp=max(temp,dp[j].h);
                dp[i].h += temp;
                ans = max( ans, dp[i].h );
            }
            printf("Case %d: maximum height = %d\n",cas++,ans);
        }
        return 0;
    }
    



  • 相关阅读:
    HDU 5273 Dylans loves sequence 暴力递推
    HDU 5285 wyh2000 and pupil 判二分图+贪心
    HDU 5281 Senior's Gun 贪心
    HDU 5651 xiaoxin juju needs help 逆元
    HDU 5646 DZY Loves Partition
    HDU 5366 The mook jong
    HDU 5391Z ball in Tina Town 数论
    HDU 5418 Victor and World 允许多次经过的TSP
    HDU 5642 King's Order dp
    抽屉原理
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3059943.html
Copyright © 2011-2022 走看看