zoukankan      html  css  js  c++  java
  • 嵌套矩形和嵌套矩形的拓展

    嵌套矩形先对矩形的长从大到小排列,长相同对宽从大到小排列(可证明不能不对宽排列),然后求LIS

    dp[i] = max( dp[j] ) + w[i] ( j<i ) 

    熟悉了这题以后

    hdu 1069 Monkey and Banana 就很容易

    /*
    ID: neverchanje
    PROG:
    LANG: C++11
    */
    #include<vector>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<set>
    #include<queue>
    #include<map>
    #define INF 0Xfffffffff
    #define st_size (1<<18)-1
    #define maxn
    typedef  long long ll;
    using namespace std;
    
    int n; 
    int a,b,c;
    struct node{
        int a,b,c; //长宽(底面),高 
        bool operator<(const node& x)const{
            if(a==x.a)    return b>x.b; ///注意!! 
            return a>x.a;
        }
    }cube[200];
    int dp[200];
    
    int main(){
    //    freopen("a.txt","r",stdin);
    //    freopen(".out","w",stdout);
        
        int cs = 1;
        while(cin>>n){
            if(!n)    break;
            
            memset(dp,0,sizeof(dp));
            int cnt=0,ans=0,maxv;
            for(int i=0;i<n;i++)
            {
                scanf("%d %d %d",&a,&b,&c);
                cube[cnt++] = (node){max(a,b),min(a,b),c};
                cube[cnt++] = (node){max(b,c),min(b,c),a};
                cube[cnt++] = (node){max(a,c),min(a,c),b};
            }
            sort(cube,cube+cnt);
            for(int i=0;i<cnt;i++){
                maxv=0;
                for(int j=0;j<i;j++)
                    if( cube[j].a>cube[i].a && cube[j].b>cube[i].b )
                        maxv = max(maxv,dp[j]);
                dp[i] = maxv+cube[i].c;
                ans = max( dp[i],ans );
            }
            
            printf("Case %d: maximum height = %d
    ",cs++,ans);
        }
        return 0;
    }
    
    /*
    DESCRIPTION:    
    没看到每个block都是unlimited的...
    那就好写了:
        实际上总共有3*n个block 
        用类似嵌套矩形的方法 
    */
    View Code
  • 相关阅读:
    expect脚本实例
    Linux dialog详解(图形化shell)
    makefile——小试牛刀
    gdb入门
    linux常见系统调用函数列表
    linux前后台任务的切换以及执行暂停
    centos 7.0 lnmp安装部署步骤
    环境列表
    setjmp与longjmp非局部跳转函数的使用
    malloc,calloc,alloca和free函数
  • 原文地址:https://www.cnblogs.com/neverchanje/p/3727201.html
Copyright © 2011-2022 走看看