• poj2241 The Tower of Babylon


    The Tower of Babylon

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

    /*
        有些类似“叠箱子”问题,看起来一种砖有无限多个,其实最多只能用到两次。
        说下我的思路吧,一块砖有3个数据,虽然3!=6,但本质上还是只有3种,把这三种都表示出来,使x<=y;这样就有了3n组数据。因为我不会建图,就把这3n组数据再排列一下,使一块砖只能放到它后面的砖之上,而绝不能放到之前的砖上,即按x为一级y为二级升序排列,结合之前的x<=y,就能达到目的了。
    */
    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    typedef struct
    {
        int arr[3];
    }Box;
    Box a[100];
    bool cmp(Box a,Box b)
    {
        if(a.arr[0]!=b.arr[0])
            return a.arr[0] < b.arr[0];
        else if(a.arr[1] != b.arr[1])
            return a.arr[1] < b.arr[1];
        else return a.arr[2] < b.arr[2];
    }
    int ok(Box a,Box b)
    {
        return (a.arr[0] < b.arr[0] && a.arr[1] < b.arr[1]);
    }
    int main()
    {
        //freopen("Cola.in","r",stdin);
        int n,m=0,i,j,t,max;
        while(cin>>n,n)
        {
            m++;
            for(i = 0; i < 3*n; i += 3)
            {
                cin>>a[i].arr[0]>>a[i].arr[1]>>a[i].arr[2];
                sort(a[i].arr,a[i].arr+3);
                a[i+1].arr[0] = a[i].arr[0];
                a[i+1].arr[1] = a[i].arr[2];
                a[i+1].arr[2] = a[i].arr[1];
                a[i+2].arr[0] = a[i].arr[1];
                a[i+2].arr[1] = a[i].arr[2];
                a[i+2].arr[2] = a[i].arr[0];
             }
            sort(a,a+3*n,cmp);
            max = 0;
            for(i = 3*n-2; i >= 0; i--)
            {
                t = a[i].arr[2];
                for(j = i+1; j < 3*n; j++)
                {
                    if(ok(a[i],a[j]) && a[i].arr[2]+a[j].arr[2] > t)
                        t = a[i].arr[2]+a[j].arr[2];
                }
                a[i].arr[2] = t;
                if(t > max) max = t;
            }
            printf("Case %d: maximum height = %d
    ",m,max);
        }
        return 0;
    }
  • 相关阅读:
    1016: 写出来吧
    从硬件工程师转到纯软件开发,回顾那些岁月
    用大白话聊聊JavaSE -- 自定义注解入门
    数组中的一些常用方法总结
    js中的隐式转换
    开源OSS.Social微信项目进阶介绍
    .Net开源oss项目进度更新(含小程序接口)
    windows下部署免费ssl证书(letsencrypt)
    完成OSS.Http底层HttpClient重构封装 支持标准库
    谈javascript变量声明
  • 原文地址:https://www.cnblogs.com/thmyl/p/7400202.html
Copyright © 2020-2023  润新知