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\n",iCase++,ans);
}
return 0;
}
UVa 407的更多相关文章
- 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)
// The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
随机推荐
- PHPEXCEL 设置被导出的表格样式代码
1.设置表格高度.宽度 代码: $objPHPExcel->getActiveSheet()->getRowDimension('6')->setRowHeight(30);//行高 ...
- 了解Spark源码的概况
本文旨在帮助那些想要对Spark有更深入了解的工程师们,了解Spark源码的概况,搭建Spark源码阅读环境,编译.调试Spark源码,为将来更深入地学习打下基础. 一.项目结构 在大型项目中,往往涉 ...
- BZOJ 2653 middle | 主席树
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2653 题解: 设答案为ans,把大于等于ans的记为1,小于的记为-1,这样可以知道当前an ...
- 3.5 实例讲解Lucene索引的结构设计
3.2节我们已经运行了一个Lucene建立索引的小程序,这一节我们就以这个小程序为例讲解一下Lucene建立索引的过程. import java.nio.charset.StandardCharset ...
- HDU1536&&POJ2960 S-Nim(SG函数博弈)
S-Nim Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status ...
- 关于 cgdb & gdbtui 的输入scanf()问题
使用cgdb 和 gdbtui 调试程序时, 遇到scanf函数时 it seems to enter into an infinite loop According to the info page ...
- 【MFC】画线
1.DrawTestDlg.h afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT ...
- 开源免费的C/C++网络库(c/c++ sockets library)(转)
原文转自 http://blog.csdn.net/weiwangchao_/article/details/8730199 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨 ...
- ECShop安装实录
版本: ecmoban_V2.7.3_UTF8_20150623 来源: 官网 一. 给 C:\Windows\temp目录增加 IIS_Users 完全权限. 二. 安装报错: Warning: d ...
- git的使用03
之前我们写的都是将代码存在本地,我们还可以将代码github官网上,放在github的服务器上去托管