zoukankan      html  css  js  c++  java
  • UVa 437 The Tower of Babylon(简单DP)

    题意:

    给你n种石头,长x,宽y,高z,每种石头数目无限,一块石头能放到另一块上的条件是:长和宽严格小于下面的石头。问叠起来的最大高度。

    思路:

    dp[i]表示选择第i个能达到的最大高度。注意每个石头可以有6种组合,都要输入进去。类似于LIS。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int dp[256];
    
    struct Node {
        int x, y, z;
    
        friend bool operator < (const Node &a, const Node &b) {
            if (a.x == b.x)
                return a.y > b.y;
            return a.x > b.x;
        }
    } node[256];
    
    bool judge(const Node &a, const Node &b)
    {
        if (a.x < b.x && a.y < b.y)
            return true;
        return false;
    }
    
    int main()
    {
        int n, count = 0;
        while (scanf("%d", &n) && n)
        {
            for (int i = 0; i < n; ++i)
            {
                int a, b, c;
                scanf("%d %d %d", &a, &b, &c);
                node[i*6].x = a, node[i*6].y = b, node[i*6].z = c;
                node[i*6+1].x = a, node[i*6+1].y = c, node[i*6+1].z = b;
                node[i*6+2].x = b, node[i*6+2].y = a, node[i*6+2].z = c;
                node[i*6+3].x = b, node[i*6+3].y = c, node[i*6+3].z = a;
                node[i*6+4].x = c, node[i*6+4].y = a, node[i*6+4].z = b;
                node[i*6+5].x = c, node[i*6+5].y = b, node[i*6+5].z = a;
            }
            sort(node, node + n * 6);
    
            int ans = 0;
            memset(dp, 0, sizeof(dp));
            dp[0] = node[0].z;
            for (int i = 1; i < n * 6; ++i)
            {
                dp[i] = node[i].z;
                for (int j = 0; j < i; ++j)
                    if (judge(node[i], node[j]) && dp[i] < dp[j] + node[i].z)
                        dp[i] = dp[j] + node[i].z;
    
                if (dp[i] > ans)
                    ans = dp[i];
            }
            ++count;
            printf("Case %d: maximum height = %d\n", count, ans);
        }
        return 0;
    }

     

    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    2018-8-10-win10-uwp-按下等待按钮
    2018-8-10-win10-uwp-按下等待按钮
    2019-6-23-win10-uwp-应用放到桌面
    2019-6-23-win10-uwp-应用放到桌面
    PHP mysqli_get_client_info() 函数
    PHP mysqli_get_charset() 函数
    PHP mysqli_free_result() 函数
    PHP mysqli_field_tell() 函数
    PHP mysqli_field_seek() 函数
    约束、视图、序列、伪列和索引
  • 原文地址:https://www.cnblogs.com/kedebug/p/2771494.html
Copyright © 2011-2022 走看看