zoj-1093-Monkey and Banana

一道DP题,不过在给元素排序时需要注意。

/*
ID:slowlight
PROG:Monkey and Banana
LANG:C++
DATE:2013-9-4
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

typedef struct{
	int a;
	int b;
}Rect;

typedef struct{
	Rect base;
	int height;
}Brick;

bool operator < ( const Brick & a, const Brick & b)
{
	Rect b_base = b.base;
	Rect base   = a.base;

	if( base.a < b_base.a && base.b < b_base.b || 
		base.a < b_base.b && base.b < b_base.a )
		return true;
	else
		return false;
};

bool cmp(const Brick & a, const Brick & b)
{
	return a.base.b < b.base.b;
}

Brick d[100];
int f[100];

int main()
{
	freopen("input.in", "r", stdin);
	freopen("output.out", "w", stdout);

	int N;

	int case_cnt = 0;

	int a, b, c;//3 edges of the brick

	cin >> N;

	case_cnt = 1;

	do
	{

		int max_height = 0;

		int cnt = 0;

		while( N-- )
		{
			cin >> a >> b >> c;

			Rect rect;
			rect.a = min(a, b);
			rect.b = max(a, b);
			d[cnt].base = rect;
			d[cnt++].height = c;

			rect.a = min(a, c);
			rect.b = max(a, c);
			d[cnt].base = rect;
			d[cnt++].height = b;

			rect.a = min(b, c);
			rect.b = max(b, c);
			d[cnt].base = rect;
			d[cnt++].height = a;
		}

		sort(d, d + cnt, cmp);

		int size = cnt;

		for(int i=0;i<size;i++)
			f[i] = d[i].height;

		for(int i=0;i<size;i++)
			for(int j=0;j<i;j++)
				if( d[j] < d[i] )
				{
					int temp;

					temp = d[i].height + f[j];

					if( temp > f[i] )
						f[i] = temp;
				}

		for(int i=0;i<size;i++)
			if( f[i] > max_height )
				max_height = f[i];

		cout << "Case " << case_cnt <<": maximum height = " << max_height << endl;

		cin >> N;

		case_cnt++;

	}while( N );

	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值