• HDU1069 Monkey and Banana 动态规划


    简单动态规划,将长方体分解成六个,然后二重排序后,DP即可。

    对于当前方块,选择前面的能够放置的方块的最大值加上本身的高度。

    代码如下:

    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #define MAXN 200
    using namespace std;
    
    // 对于每个长方体,有三种不同的方法。
    int N, dp[MAXN];
    
    struct Node
    {
        int x, y, z;
    }e[MAXN];
    
    inline int max(int x, int y)
    {
        return x > y ? x : y;
    }
    
    bool cmp(const Node &a, const Node &b)
    {
        if (a.x != b.x)
            return a.x > b.x;
        else
            return a.y > b.y;
    }
    
    int judge(int a, int b)
    {
        if (e[a].x > e[b].x && e[a].y > e[b].y) {
            return 1;
        }
        else {
            return 0;
        }
    }
    
    int DP()
    { 
        int Max = 0;
        memset(dp, 0, sizeof (dp)); 
        for (int i = 1; i <= 6*N; ++i) {
            dp[i] = e[i].z;
            Max = max(Max, dp[i]); // 没加这一句,一直WA
            for (int j = 1; j < i; ++j) {
                if (judge(j, i)) {
                    dp[i] = max(dp[i], dp[j]+e[i].z);
                    Max = max(Max, dp[i]); 
                }
            }
        }
        return Max;
    }
    
    int main()
    {
        int ca = 1;
        while (scanf("%d", &N), N) {
            for (int i = 1; i <= 6*N; i+=6) {
                scanf("%d %d %d", &e[i].x, &e[i].y, &e[i].z);
                e[i+1].x = e[i].y, e[i+1].y = e[i].z, e[i+1].z = e[i].x;
                e[i+2].x = e[i].z, e[i+2].y = e[i].y, e[i+2].z = e[i].x;
                e[i+3].x = e[i].x, e[i+3].y = e[i].z, e[i+3].z = e[i].y;
                e[i+4].x = e[i].z, e[i+4].y = e[i].x, e[i+4].z = e[i].y;
                e[i+5].x = e[i].y, e[i+5].y = e[i].x, e[i+5].z = e[i].z;
            }
            sort(e+1, e+1+6*N, cmp); 
            printf("Case %d: maximum height = %d\n", ca++, DP());
        }
        return 0;
    }
  • 相关阅读:
    c++的引用 安静点
    mac 安装
    百度小程序canvas
    贝塞尔曲线
    事件循环
    js 模块化
    babel
    rollup babel
    js webgl
    js 异步
  • 原文地址:https://www.cnblogs.com/Lyush/p/2456109.html
Copyright © 2020-2023  润新知