zoukankan      html  css  js  c++  java
  • UVa 407

       此问题与求上升序列最大和类似,可以作为DAG模型计算。将每一快砖分解为3块,将所有砖块按照底排序,注意sort排序中涉及到底的两个参数x,y,这时候一定要有优先排,比如先排x再排y,不能同时排x和y,下面排序写法是错误的:

    bool operator<(Rec a){
       return x<a.x&&y<a.y;
    }
    

      

    /*----UVa437
    --首先将每一个长方体按照三个方向,分解为3个长方体
    --用dp[i]表示以第i个长方体为底所得到的最大高度
    --问题其实和hdu1087一样
    */
    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<vector>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int MAXN = 100;
    struct Rec{
    	int x, y,h;
    	Rec(int a=0,int b=0,int c=0) :x(a), y(b), h(c){}
    	bool operator<( Rec a){
    		//一定要有优先比较顺序,先按照x再按照y
    		if (x == a.x)
    			return y < a.y;
    		return x < a.x;
    	}
    };
    Rec rec[MAXN];
    int dp[MAXN];
    int n;
    /*vector<int>vec[MAXN];
    int dfs(int i){
    	int &ans = dp[i];
    	if (ans >= 0)
    		return ans;
    	ans = rec[i].h;
    	for (int j = 0; j < (int)vec[i].size(); j++)
    		ans = max(ans, dfs(vec[i][j]) + rec[i].h);
    	return ans;
    }*/
    int main(){
    	int i,j,iCase=1;
    	int a[3];
    	while (scanf("%d", &n) && n){
    		int cnt =1;
    		for (i = 0; i < n; i++){
    			scanf("%d%d%d", &a[0], &a[1], &a[2]);
    			sort(a, a + 3);
    			rec[cnt++] = Rec(a[0],a[1],a[2]);
    			rec[cnt++] = Rec(a[1],a[2],a[0]);
    			rec[cnt++] = Rec(a[0],a[2],a[1]);
    		}
    		n = cnt;
    		sort(rec, rec + n);
    		int ans = 0;
    		for (i = 1; i < n; i++){
    			dp[i] = rec[i].h;
    			for (j = 1; j < i; j++){
    				if (rec[j].x < rec[i].x&&rec[j].y < rec[i].y)
    					dp[i] = max(dp[i], dp[j] + rec[i].h);
    			}
    			ans = max(ans, dp[i]);
    		}
    		/*for (i = 0; i < n; i++){
    			vec[i].clear();
    			for (j = 0; j < n; j++){
    				if (rec[j] < rec[i])
    					vec[i].push_back(j);
    			}
    		}
    		int ans = 0;
    		memset(dp, -1, sizeof(dp));
    		for (i = 1; i <n; i++){
    			dp[i] = dfs(i);
    			ans = max(ans, dp[i]);
    		}*/
    		printf("Case %d: maximum height = %d
    ",iCase++,ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    uoj 36 玛里苟斯
    readlink
    Endless Spin
    rm
    rmdir
    [学习笔记]min-max容斥
    cp
    [HAOI2015]按位或
    java实现第四届蓝桥杯公式求值
    java实现第四届蓝桥杯危险系数
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5783519.html
Copyright © 2011-2022 走看看