题目大意:
有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; }
相关推荐
This is the AR sample via BabylonJS
【babylonjs】模型展示babylon gltf viewer是一款基于Babylon.js库的第三方开发工具,主要用于3D模型的预览和展示。Babylon.js是一个强大的、开源的WebGL和WebVR框架,专为现代浏览器设计,可以创建丰富的交互式3D...
《Babylon.JS.Essentials》是一本深入探讨Babylon.js的书籍,它针对JavaScript游戏开发和3D交互式应用提供了详尽的基础知识。Babylon.js是一款强大的开源3D图形引擎,广泛用于Web上的游戏开发和可视化项目。本书的...
Blender是一款强大的开源3D建模和动画软件,而Babylon.js则是一个先进的WebGL和WebVR框架,用于在浏览器中展示3D内容。"最新blender转babylon插件"是专为Blender设计的,目的是方便用户将他们在Blender中创建的3D...
【BabylonJS Maya2019】是一个用于将Autodesk Maya 2019中的3D模型导出为GL Transmission Format(gltf)的工具。GLTF是一种开放标准的3D资产交换格式,旨在简化3D内容在Web上的共享和加载。BabylonJS是这个过程的...
Max2Babylon是一款强大的3D建模软件3ds Max的插件,其主要功能是将3ds Max中的场景和模型导出为Babylon.js格式。Babylon.js是一个全面的开源JavaScript库,用于在Web浏览器中创建高质量的3D图形和游戏,无需任何插件...
Babylon.JS是一款强大的开源JavaScript库,专为构建3D游戏和应用程序而设计。它利用WebGL技术,使得在浏览器中实现高质量的三维图形变得轻而易举。本资源"babylon.js开发基础英文版 - Babylon.JS.Essentials"提供了...
【babylon.js 源码解析】 Babylon.js 是一个强大的开源JavaScript库,专为WebGL和WebVR设计,用于构建3D游戏和应用程序。它提供了完整的框架,包括渲染、光照、材质、动画、物理引擎等多个方面,使得开发者能够轻松...
《Babylon.js for 3ds Max 2018:高效3D模型转换与插件使用指南》 在3D建模和渲染的世界里,3ds Max是一款广受欢迎的软件,而Babylon.js是JavaScript库,专为Web上的3D图形处理提供强大支持。当这两者结合时,我们...
《Babylon 9安装程序详解》 Babylon9_setup是针对Babylon 9这一强大翻译软件的安装程序。Babylon 9是一款综合性的语言工具,它集成了多语言翻译、词典查询、网页翻译等功能,为用户提供便捷的语言解决方案。这款...
"Blender导出babylon格式插件"就是为了让Blender能够无缝地与Babylon.js框架集成,将3D模型转换为可以在Web环境中运行的格式。 要了解如何使用这个插件,首先你需要知道它是如何工作的。Blender中的babylon格式导出...
babylon install and key
**基于Blazor Server的BabylonJs项目引用库详解** 在现代Web开发中,Blazor框架为使用C#构建交互式Web应用提供了新的途径,而Babylon.js则是一款强大的3D图形库,广泛用于创建复杂的WebGL场景。将这两者结合,...
在本文中,我们将深入探讨如何在基于Blazor WebAssembly的应用中使用Babylon.js库进行3D开发。Blazor WebAssembly是一种使用C#和.NET框架构建客户端Web应用程序的技术,而Babylon.js则是一个强大的JavaScript库,专...
Max2Babylon是一款强大的3D建模软件3DS Max与WebGL标准格式gltf之间的转换工具。这款工具能够帮助3D设计师高效地将他们的3D模型从3DS Max导出为gltf格式,使得这些模型能够在网页、游戏或虚拟现实应用中无缝展示。在...
Babylon6Babylon6Babylon6Babylon6Babylon6Babylon6Babylon6
Max2Babylon是一款强大的3D建模工具3DMax的插件,其主要功能是将3DMax创建的模型转换为GLTF(通用场景语言传输格式)或GLB(GLTF二进制版本)。这款插件的版本为1.4.2,专门针对3DMax用户设计,以帮助他们更方便地将...
标题中的“1 安装软件node-v14解决max内插件babylon.导出是不能压缩问题”指的是在3D建模软件3ds Max中使用Babylon.js插件时遇到的问题,以及如何通过安装特定版本的Node.js来解决这个问题。Babylon.js是一个强大的...
《Babylon 6 多语言词典软件详解》 在信息技术领域,语言翻译和理解是至关重要的一环,尤其在全球化的今天,多语言交流成为日常工作和学习的常态。Babylon 6 就是一款专为解决这一问题而设计的多语言词典软件,它为...
Babylon.js是一个强大的、全面的JavaScript框架,专为在现代Web浏览器中构建3D游戏和应用程序而设计。它利用了HTML5的Canvas元素和WebGL图形接口,为开发者提供了丰富的功能和高效的性能,使他们能够在网页上创建...