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;
}

  

时间: 2024-10-09 09:45:04

UVa 407的相关文章

UVA 820 --- POJ 1273 最大流

找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的时候注意一下. 而且我居然犯了更愚蠢的错误,以为重边的时候需要选最大的,正解应该是累加.... 1 #include<stdio.h> 2 #include<queue> 3 #include<string.h> 4 #define INF 999999 5 using n

Fast Matrix Operations(UVA)11992

UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x1<=x2,y1<=y2)子矩阵中的所有元素add上val: 2 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x1<=x2,y1<=y2)子矩阵中的所有元素set为val: 3 x1 y1 x2 y2 val 表示输

UVa 568 Just the Facts

A过去后看了一下别人的解法,发现除了打表还有一种数论的方法. 分析一下阶乘后面的0是怎么出现的呢,当然是2乘5得到的. 我们将1~N先放在一个数组里面. 从数组第一个元素开始,先统计一下N!中因子为5的个数记为count,将其除去,然后再除去count个2.这样一来的话把所有元素乘起来后就不会出现10的倍数了. 当然并不是真正的乘起来,那样的话肯定是要溢出的,因为只关心最后一位数,所以每次乘完后求10的余数即可. 我的做法是打表,因为题目里给了N <= 10000的条件限制,所以可以把1~100

UVA 562 Dividing coins --01背包的变形

01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 50007 int c[102],d

UVA 10341 Solve It

Problem F Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of multiple test cases and te

UVA 11014 - Make a Crystal(容斥原理)

UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O).那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n).n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的.比方f(6)在f

[UVa] Palindromes(401)

UVA - 401 Palindromes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDED

uva 401.Palindromes

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342 题目意思:给出一段字符串(大写字母+数字组成).判断是否为回文串 or 镜像串 or 回文镜像串 or 什么都不是.每个字母的镜像表格如下 Character Reverse Character Reverse Character Reverse A A M M Y Y B

[2016-02-19][UVA][129][Krypton Factor]

UVA - 129 Krypton Factor Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description You have been employed by the organisers of a Super Krypton Factor Contest in which contestants have very high mental and physica