zoukankan      html  css  js  c++  java
  • 暑假练习:Uva437

    题目链接:uva437

    解题思路:只有长和宽均小于下面立方体的长和宽的方块才可以放在上面。因此这是一个有序对,可以抽象成有向无环图来做。运用DAG求最长路算法来求。其中用dp[i][j]来表示第i种方块以第j种边为高时的最高高度。

    代码实例:

    #include<iostream>
    #include<cstring>
    using namespace std;
    struct Node{
    	int a[3];
    }tw[35];
    int dp[35][3];
    int G[35][3][35][3];
    int n;
    int DAG_dp(int f,int s){
    	int& ans = dp[f][s];
    	if(dp[f][s])	return dp[f][s];
    	dp[f][s] = 0;
    	int idx = f,idh = s;
    	for(int i = 0;i < n;i++)
    		for(int j = 0;j < 3;j++)
    			if(G[idx][idh][i][j]){
    				ans = max(DAG_dp(i,j),ans);
    			}
    	ans += tw[idx].a[idh];
    	return ans;
    	
    }
    int main()
    {
    	int a,b,c;
    	int kcase = 0;
    	while(cin >> n && n){
    		memset(dp,0,sizeof(dp));
    		memset(G,0,sizeof(G));
    		for(int i = 0;i < n;i++){
    			cin >> tw[i].a[0] >> tw[i].a[1] >> tw[i].a[2];
    		}
    		for(int i = 0;i < n;i++)
    			for(int j = 0;j < 3;++j)
    				for(int k = 0;k < n;k++)
    					for(int z = 0;z<3;z++){
    						if((tw[i].a[(j+2)%3] < tw[k].a[(z+2)%3] && tw[i].a[(j+1)%3] < tw[k].a[(z+1)%3])
    						|| (tw[i].a[(j+1)%3] < tw[k].a[(z+2)%3] && tw[i].a[(j+2)%3] < tw[k].a[(z+1)%3]))
    							G[i][j][k][z] = 1;
    					}
    		int maxh = -1;
    		for(int i = 0;i < n;i++)
    			for(int j = 0;j < 3;++j)
    		//	cout << DAG_dp(i,j) << " ";
    				 maxh = max(DAG_dp(i,j),maxh);
    		cout << "Case " << ++kcase << ": maximum height = " << maxh << endl;
    	}
    	return 0;
    }
  • 相关阅读:
    网页布局——table布局
    Flex 布局——语法属性详解
    CSS实现垂直居中的几种方法
    svn:冲突(<<<<<<.mine ==== >>>>>>.xxxx)
    mysql:4种时间类型
    js:"use strict"; 严格模式
    js函数的Json写法
    spring 官方文档
    mybatis技术文章
    java:可变参数(转载)
  • 原文地址:https://www.cnblogs.com/long98/p/10352225.html
Copyright © 2011-2022 走看看