前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hdu 1069 Monkey and Banana 经典dp

hdu 1069 Monkey and Banana 经典dp

作者头像
用户2965768
发布2019-08-01 10:45:42
4040
发布2019-08-01 10:45:42
举报
文章被收录于专栏:wymwym

题意:给n个 维度为(x,y,z)的 立方体,垒起来,要求下层长宽严格大于上层,求最大高度

解:一个长方体理论上有6种方法,n最大30,30*6数据较小。有些特殊情况不做处理。

dp[i] 表示使用第 i 个长方体的最大高度。宽相同按照长从小到大排序,否则按照宽从小到大排序。

最后遍历取最大值

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct No{
	int x,y,z;
}no[200];
int cnt = 0;
int dp[200];
void add(int x,int y,int z){
	no[cnt].x = x;	no[cnt].y = y;
	no[cnt++].z = z;
}
int cmp(No a,No b){
	if(a.x==b.x)return a.y<b.y;
	return a.x<b.x;
}
int main()
{
	int n,x,y,z,maxh,num=0;
	while(scanf("%d",&n)&&n){
		cnt = 0;
		for(int i=0;i<n;i++){
			scanf("%d %d %d",&x,&y,&z);
			add(x,y,z); add(x,z,y);
			add(z,x,y); add(z,y,x);
			add(y,x,z); add(y,z,x);
		}
		sort(no,no+cnt,cmp); 
		for(int i=0;i<cnt;i++){
			maxh = 0;
			for(int j=0;j<i;j++){
				if(no[i].x>no[j].x&&no[i].y>no[j].y)
				maxh=maxh>dp[j]?maxh:dp[j];	
			}
			dp[i]=no[i].z+maxh;
		}	
		int ans = 0;		
		for(int i=0;i<cnt;i++)
			ans=max(ans,dp[i]);
		printf("Case %d: maximum height = %d\n",++num,ans);
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档