【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana
https://vjudge.net/contest/68966#problem/C
【参考】http://blog.csdn.net/qinmusiyan/article/details/7986263
【题意】:多组测试数据
每组测试数据给出n个砖块的长、宽、高,每种砖块有无穷多个,可以有三种不同的放置方法(xy;xz;yz),下面的砖要比上面的砖的长和宽都大,问最大的高度是多少。
【思路】:【贪心+dp】每块砖有三种放置方法,把所有砖的所有状态都压入vector,先贪心,按面积大小排序,使它本身尽可能的满足单调递增;dp[i]表示以ln[i]这块砖为最大砖的最大高度,则dp[i]=max(dp[k]+ln[i].h,ln[i].h);其中0<=k<=i-1且ln[i]>ln[k],一定要注意自己重载的运算符为>,不能写成ln[k]<ln[i]....orz
【代码】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue> using namespace std;
const int maxn=;
int n;
int d[];
struct node
{
int l,w,h;
bool operator > (const node& p)const
{
return (l>p.l)&&(w>p.w);
}
node(int ll,int ww,int hh):l(ll),w(ww),h(hh){}
node(){}
}; bool cmp(const node& x,const node& y)
{
return x.l*x.w<y.l*y.w;
}
int dp[*maxn];
vector<node> ln;
int main()
{
int kas=;
while(scanf("%d",&n)==&&n)
{
memset(dp,,sizeof(dp));
ln.clear();
for(int i=;i<n;i++)
{
scanf("%d%d%d",&d[],&d[],&d[]);
sort(d,d+);
ln.push_back(node(d[],d[],d[]));
ln.push_back(node(d[],d[],d[]));
ln.push_back(node(d[],d[],d[]));
}
// sort(ln,ln+n);
sort(ln.begin(),ln.end(),cmp);
//dp[i]表示以ln[i]这块砖为最大砖的 最大高度 dp[]=ln[].h;
int ans=dp[];
for(int i=;i<ln.size();i++)
{
dp[i]=ln[i].h;
for(int k=i-;k>=;k--)
{
// if(ln[k]<ln[i])
if(ln[i]>ln[k])
{
dp[i]=max(dp[i],dp[k]+ln[i].h);
}
}
ans=max(ans,dp[i]);
}
printf("Case %d: maximum height = %d\n",kas++,ans); }
return ;
}
【疑问】其实还是不太明白贪心那里.....模糊不清....为什么是这样排序?先按面积,然后再判断是不是严格小
【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana的更多相关文章
- [kuangbin带你飞]专题十二 基础DP1
ID Origin Title 167 / 465 Problem A HDU 1024 Max Sum Plus Plus 234 / 372 Problem B HDU 1 ...
- 【算法系列学习】DP和滚动数组 [kuangbin带你飞]专题十二 基础DP1 A - Max Sum Plus Plus
A - Max Sum Plus Plus https://vjudge.net/contest/68966#problem/A http://www.cnblogs.com/kuangbin/arc ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼
https://vjudge.net/contest/68966#problem/G 正解一: http://www.clanfei.com/2012/04/646.html #include< ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】
https://vjudge.net/contest/68966#problem/F http://blog.csdn.net/libin56842/article/details/9048173 # ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 E - Super Jumping! Jumping! Jumping!
https://vjudge.net/contest/68966#problem/E http://blog.csdn.net/to_be_better/article/details/5056334 ...
- 【算法系列学习】状压dp [kuangbin带你飞]专题十二 基础DP1 D - Doing Homework
https://vjudge.net/contest/68966#problem/D http://blog.csdn.net/u010489389/article/details/19218795 ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV
http://www.cnblogs.com/joeylee97/p/6616039.html 引入一个cnt,输入元素与上一个元素相同,cnt增加,否则cnt减少,当cnt为零时记录输入元素,因为所 ...
- [ An Ac a Day ^_^ ] [kuangbin带你飞]专题十二 HDU 1176 免费馅饼
题意: 中文题意不解释…… 思路: 先把x,T存到矩阵里 然后像数塔一样从最底层走一边就行了 dp[i][j]代表在时间为j时 第i个位置最多能吃到多少个馅饼 最后输出第0时刻的5位置的馅饼数量就好了 ...
- 【算法系列学习】Dijkstra算法变形 [kuangbin带你飞]专题四 最短路练习
https://vjudge.net/contest/66569#problem/B 类试题:noip2013 货物运输 POJ 1797 Heavy Transportation 方法一:Dijks ...
随机推荐
- Azure Messaging-ServiceBus Messaging消息队列技术系列5-重复消息:at-least-once at-most-once
上篇博客中,我们用实际的业务场景和代码示例了Azure Messaging-ServiceBus Messaging对复杂对象消息的支持和消息的持久化: Azure Messaging-Service ...
- Sublime Text 3常用插件安装(持续更新)
首先声明一下,小编是做后台开发出身,但是总是想捣鼓一些小的网站出来,可能是完美心作祟,感觉前端这边不能差事,所以就自己上了,一开始是用eclipse来开发的,具体原因忘了,也不知道怎么就开始用Subl ...
- 1-PHP基本概念
PHP 概念:服务器脚本语言 静态网站:不支持交互的网站(html) 动态网站:支持数据交互的网站 实现动态网站的技术 实现技术 网站后缀 ASP .asp PHP .php .NET .aspx J ...
- SQL Tuning 基础概述10 - 体会索引的常见执行计划
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...
- js中的call()、apply()和bind()方法的区别
call(thisObj,param1,param2....)方法:调用一个对象的方法,用另外的对象去替换当前对象. 下面给出一个例子: function add(a,b){ return a+b; ...
- 简单的android启动跳转页面
java代码示例: package com.rcl; import android.app.Activity;import android.content.Intent;import android. ...
- websocket 项目应用
序言 很早就想用起来websocket,可惜需要后台服务的支持,技术的翻新总会给我带来巨大的冲击,最近后端人员学习了websocket相关后台技术.于是我们开始动起来了. 学习 这位大兄弟的文章 h ...
- 任务一:零基础HTML编码练习
任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...
- UNIX基础上
时光飞逝,转眼已经毕业快2年了,觉得自己学的东西多却不精.对此深深的思考一下,觉得有必要连载unix环境编程文章,以此激励自己学习.在此立贴为证,2天一篇博客从零开始阐述unix的环境编程. 参考书籍 ...
- XJOI1424解压字符串
解压字符串 给你一个字符串S,S是已经被加密过的字符串.现在要求你把字符串S还原.字符串S可能会出现这样的格式:k(q),它表示字符串q重复了k次,其中q是0个或多个字符,而k是一个数字,范围是0至9 ...