`

UVA The Tower of Babylon(437)

 
阅读更多

题目大意:

       有n种长宽高为x,y,z的砖头,每种都有无数个。砖头可以用不同方式来盖,砖头a以某种方式可以盖在砖头b上,当且仅当a的底部的长宽都要比b的底部长宽要小。问最高可以建多高?

 

解题思路:

       动态规划中的最长递增(递减)子序列问题,每个砖头可以看成是3个砖头,即A(x,y,z) , B(x,z,y) 和 C(y,z,x),其中前两个为底,大三个元素为高,然后将所有砖头进行排序,长宽小的排前面,即 (x1 < x2 && y1 < y2 ) || ( x1 < y2 && y1 < x2 ) || ( x1*y1 < x2*y2 ), 其中第三个条件为面积小的放前面,当不能满足前两个条件时,若面积大的放前面会出错,具体为什么我没弄清楚,但两者我都试过,必须得把面积小的放前面。

       排好序后,接下来就是求最大递增子序列了,只要把原来求子序列长度改为高度即可。状态转移方程为:

dp[i] = max( dp[i], dp[j]+v[i][2] );

其中v[i][2]表示第i个砖头的高度。dp[i]表示第i个砖头能够搭成的最高高度。

 

代码:

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;

bool cmp( vector<int> v1, vector<int> v2 )
{
	return ( (v1[0]<v2[0] && v1[1]<v2[1]) || ( v1[0]<v2[1] && v1[1]<v2[0] ) || (v1[0]*v1[1] < v2[0]*v2[1]) );
}

int dp[30000] = {1};

int main()
{
	freopen( "test.txt", "r", stdin );

	int T = 1;
	int N;
	int value1, value2, value3;

	while( cin>>N, N )
	{
		memset(dp,0,sizeof(dp) );

		vector<int> temp;
		vector< vector<int> > v;
		for( int i = 0; i < N; i++ )
		{
			cin>>value1>>value2>>value3;
			temp.push_back(value1);
			temp.push_back(value2);
			temp.push_back(value3);
			v.push_back(temp);
			temp.clear();
			temp.push_back(value1);
			temp.push_back(value3);
			temp.push_back(value2);
			v.push_back(temp);
			temp.clear();
			temp.push_back(value2);
			temp.push_back(value3);
			temp.push_back(value1);
			v.push_back(temp);
			temp.clear();
		}

		sort( v.begin(), v.end(), cmp );

		for( int i = 0; i < 3*N; i++ )
		{
			dp[i] = v[i][2];
		}

		for( int i = 3*N-2; i >= 0; i-- )
		{
			for( int j = i+1; j < 3*N; j++ )
			{
				if( ((v[j][0] > v[i][0]) && (v[j][1] > v[i][1])) || ((v[j][0] > v[i][1]) && (v[j][1] > v[i][0])) )
					dp[i] = max( dp[i], dp[j]+v[i][2] );
			}
		}

		sort(dp,dp+(3*N));
		cout<<"Case "<<T<<": maximum height = "<<dp[3*N-1]<<endl;
		T++;
	}

	return 0;
}

 

分享到:
评论

相关推荐

    BabylonAR-master_masterar_babylon_webgl_TheMaster_

    This is the AR sample via BabylonJS

    源码【babylonjs】模型展示babylon glft viewer

    【babylonjs】模型展示babylon gltf viewer是一款基于Babylon.js库的第三方开发工具,主要用于3D模型的预览和展示。Babylon.js是一个强大的、开源的WebGL和WebVR框架,专为现代浏览器设计,可以创建丰富的交互式3D...

    Babylon.JS.Essentials.pdf

    《Babylon.JS.Essentials》是一本深入探讨Babylon.js的书籍,它针对JavaScript游戏开发和3D交互式应用提供了详尽的基础知识。Babylon.js是一款强大的开源3D图形引擎,广泛用于Web上的游戏开发和可视化项目。本书的...

    BabylonJS Maya2019

    【BabylonJS Maya2019】是一个用于将Autodesk Maya 2019中的3D模型导出为GL Transmission Format(gltf)的工具。GLTF是一种开放标准的3D资产交换格式,旨在简化3D内容在Web上的共享和加载。BabylonJS是这个过程的...

    最新blender转babylon插件

    Blender是一款强大的开源3D建模和动画软件,而Babylon.js则是一个先进的WebGL和WebVR框架,用于在浏览器中展示3D内容。"最新blender转babylon插件"是专为Blender设计的,目的是方便用户将他们在Blender中创建的3D...

    Max2Babylon-0.24.0.zip

    Max2Babylon是一款强大的3D建模软件3ds Max的插件,其主要功能是将3ds Max中的场景和模型导出为Babylon.js格式。Babylon.js是一个全面的开源JavaScript库,用于在Web浏览器中创建高质量的3D图形和游戏,无需任何插件...

    Babylon.JS开发基础英文版 Babylon.JS.Essentials包含示例代码

    Babylon.JS是一款强大的开源JavaScript库,专为构建3D游戏和应用程序而设计。它利用WebGL技术,使得在浏览器中实现高质量的三维图形变得轻而易举。本资源"babylon.js开发基础英文版 - Babylon.JS.Essentials"提供了...

    babylonjs源码包

    【babylon.js 源码解析】 Babylon.js 是一个强大的开源JavaScript库,专为WebGL和WebVR设计,用于构建3D游戏和应用程序。它提供了完整的框架,包括渲染、光照、材质、动画、物理引擎等多个方面,使得开发者能够轻松...

    Babylon For 3dMax2018

    《Babylon.js for 3ds Max 2018:高效3D模型转换与插件使用指南》 在3D建模和渲染的世界里,3ds Max是一款广受欢迎的软件,而Babylon.js是JavaScript库,专为Web上的3D图形处理提供强大支持。当这两者结合时,我们...

    Babylon9_setup

    《Babylon 9安装程序详解》 Babylon9_setup是针对Babylon 9这一强大翻译软件的安装程序。Babylon 9是一款综合性的语言工具,它集成了多语言翻译、词典查询、网页翻译等功能,为用户提供便捷的语言解决方案。这款...

    Blender导出babylon格式插件

    "Blender导出babylon格式插件"就是为了让Blender能够无缝地与Babylon.js框架集成,将3D模型转换为可以在Web环境中运行的格式。 要了解如何使用这个插件,首先你需要知道它是如何工作的。Blender中的babylon格式导出...

    babylon install and key

    babylon install and key

    基于Blazor Serverde 的BabylonJs项目引用库

    **基于Blazor Server的BabylonJs项目引用库详解** 在现代Web开发中,Blazor框架为使用C#构建交互式Web应用提供了新的途径,而Babylon.js则是一款强大的3D图形库,广泛用于创建复杂的WebGL场景。将这两者结合,...

    Max2Babylon-1.3.33.rar

    Max2Babylon是一款强大的3D建模软件3DS Max与WebGL标准格式gltf之间的转换工具。这款工具能够帮助3D设计师高效地将他们的3D模型从3DS Max导出为gltf格式,使得这些模型能够在网页、游戏或虚拟现实应用中无缝展示。在...

    Babylon6

    Babylon6Babylon6Babylon6Babylon6Babylon6Babylon6Babylon6

    基于Blazor WebAssembly应用的BabylonJs项目引用库

    在本文中,我们将深入探讨如何在基于Blazor WebAssembly的应用中使用Babylon.js库进行3D开发。Blazor WebAssembly是一种使用C#和.NET框架构建客户端Web应用程序的技术,而Babylon.js则是一个强大的JavaScript库,专...

    Max2Babylon(3DMax转GFTL)-1.4.2

    Max2Babylon是一款强大的3D建模工具3DMax的插件,其主要功能是将3DMax创建的模型转换为GLTF(通用场景语言传输格式)或GLB(GLTF二进制版本)。这款插件的版本为1.4.2,专门针对3DMax用户设计,以帮助他们更方便地将...

    1 安装软件node-v14解决max内插件babylon.导出是不能压缩问题

    标题中的“1 安装软件node-v14解决max内插件babylon.导出是不能压缩问题”指的是在3D建模软件3ds Max中使用Babylon.js插件时遇到的问题,以及如何通过安装特定版本的Node.js来解决这个问题。Babylon.js是一个强大的...

    babylon6_duote.rar

    《Babylon 6 多语言词典软件详解》 在信息技术领域,语言翻译和理解是至关重要的一环,尤其在全球化的今天,多语言交流成为日常工作和学习的常态。Babylon 6 就是一款专为解决这一问题而设计的多语言词典软件,它为...

    Babylonjs一个用HTML5和WebGL构建3D游戏的完整JavaScript框架

    Babylon.js是一个强大的、全面的JavaScript框架,专为在现代Web浏览器中构建3D游戏和应用程序而设计。它利用了HTML5的Canvas元素和WebGL图形接口,为开发者提供了丰富的功能和高效的性能,使他们能够在网页上创建...

Global site tag (gtag.js) - Google Analytics