UVa 437. The Tower of Babylon

题意为输入若干种立方体(每种若干个),然后将立方体堆成一个塔,要求接触的两个面下底面的长宽分别严格大于上底面,求塔的最大高度。

将每种立方体的各种摆放形式均视为不同的立方体,并存起来。再将所有立方体按照下底面的面积从小到大排序(因为在塔上面的立方体的底面积一定比下面的小),然后只需求该序列的最大上升子序列的长度即可。

 

#include 
#include 
#include 
#include 
using namespace std;

struct node          //记录每个立方体的长宽高
{
	int x,y,z;
	void f(int a, int b,int c)
	{
		x=a; y=b; z=c;
	}
}st[200];
bool comp(node a, node b)  //按立方体的底面积从小到大进行排序
{
	if( a.x*a.y st[j].x && st[i].y >st[j].y )
					dp[i] =max( dp[i], dp[j] +st[i].z);
			if( dp[i] >t)
				t =dp[i];
		}
		printf("Case %d: maximum height = %d\n",flag++,t);
	}
	return 0;
}


 

你可能感兴趣的:(数据结构与算法)