前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

hdu1069

作者头像
@坤的
发布2018-06-04 11:18:10
6650
发布2018-06-04 11:18:10
举报
文章被收录于专栏:*坤的Blog*坤的Blog

#include <iostream> #include <algorithm> #include <cstring> using namespace std; class Data { public: int S, Height; int upl, uph; }; Data Da[100]; int n; int dp[100]; int cmp(const Data &a, const Data &b) //按照面积最大或高度最高排序 { if(a.S != b.S) return a.S > b.S; else return a.Height > b.Height; } int main() { // freopen("data.txt", "r", stdin); int i, j, k, Case = 1; int a, b, c; while(cin >> n && n) { k = 0; memset(dp, 0, sizeof(dp)); for(i = 0; i < n; i++) //计算每一个面的面积,以及顶面的长宽以及高度 { cin >> a >> b >> c; Da[k].S = a * b; Da[k].upl = a > b ? a : b; Da[k].uph = a > b ? b : a; Da[k++].Height = c; Da[k].S = a * c; Da[k].upl = a > c ? a : c; Da[k].uph = a > c ? c : a; Da[k++].Height = b; Da[k].S = b * c; Da[k].upl = b > c ? b : c; Da[k].uph = b > c ? c : b; Da[k++].Height = a; } sort(Da, Da + k, cmp); //排序 int ans = 0; for(i = 0; i < k; i++) //动态规划 { dp[i] = Da[i].Height; for(j = 0; j < i; j++) { if(Da[i].S < Da[j].S && Da[i].upl < Da[j].upl && Da[i].uph < Da[j].uph) //判断是否符合 { dp[i] = dp[i] > dp[j] + Da[i].Height ? dp[i] : dp[j] + Da[i].Height; } } if(ans < dp[i]) //最大高度 ans = dp[i]; } cout << "Case " << Case++ << ": maximum height = " << ans << endl; } return 0; }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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