• UVA 437 巴比伦塔 【DAG上DP/LIS变形】


    【链接】:https://cn.vjudge.net/problem/UVA-437

    【题意】:
    给你n个立方体,让你以长宽为底,一个个搭起来(下面的立方体的长和宽必须大于上面的长和宽)求能得到的最长高,立方体能翻来覆去交换长宽高来用。 

    【代码】:

    #include<bits/stdc++.h>
    
    using namespace std;
    const int INF = 1e6;
    const int N = 50010;
    int n,m,T,c,ca;
    struct node
    {
        int x, y, z;
    }a[N];
    int d[N];
    bool cmp(node a,node b)
    {
        return a.x*a.y < b.x*b.y; //按底面积排序
    }
    void dp()
    {
        int Max = 0;
        for(int i=1; i<=c; i++){
            d[i] = a[i].z;  //初始化位置
            for(int j=1; j<i; j++){
                if(a[i].x > a[j].x && a[i].y > a[j].y)
                    d[i] = max(d[i], d[j] + a[i].z);   //LIS变形
            }
            Max = max(Max,d[i]);
        }
        printf("Case %d: maximum height = %d
    ", ++ca, Max);
    }
    int main()
    {
        while(cin >> n, n)
        {
            int x,y,z;
            c = 0;
            memset(a,0,sizeof(a));
            memset(d,0,sizeof(d));
            for(int i=1;i<=n;i++){
                cin>>x>>y>>z;    //结构体数组压入6种情况下的长宽高
                a[++c]=(node){x,y,z};
                a[++c]=(node){y,x,z};
                a[++c]=(node){z,x,y};
                a[++c]=(node){x,z,y};
                a[++c]=(node){y,z,x};
                a[++c]=(node){z,y,x};
            }
            sort(a+1, a+c+1, cmp);
            dp();
        }
    }
  • 相关阅读:
    python可变的参数列表
    python函数中的关键字参数
    python中的else子句
    python3中的range函数
    python列表和分片
    jmeter 参数化四种方式
    redis集群和单点可以共存
    localhost与127.0.0.1的区别是什么
    Pytest单元测试框架-Pytest环境安装
    Nginx、HAProxy、LVS三者的优缺点
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9011978.html
Copyright © 2020-2023  润新知