【算法系列学习】[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 ...
随机推荐
- Python模块发布
项目根目录添加setup.py模块: from distutils.core import setup setup( name="模块名字", version="1.0. ...
- 解决MVC模型验证在IE 6 7下不起作用或者报错
文件版本列出: Jquery版本1.7.1 jQuery Validation 版本1.9.0 (VS2012创建MVC项目自动生成的版本) 最好VS2012创建MVC项目自动生成的版本,而不是VS2 ...
- JAVA-Servlet-过滤器知识总结
JAVA Filter是什么呢? Servlet过滤器实际上就是一个标准的java类,这个类通过实现Filter接口获得过滤器的功能.它在jsp容器启动的时候通过web.xml配置文件被系统加载.Se ...
- 提交任务到Spark
1.场景 在搭建好Hadoop+Spark环境后,现准备在此环境上提交简单的任务到Spark进行计算并输出结果.搭建过程:http://www.cnblogs.com/zengxiaoliang/p/ ...
- Dive in python Chapter3 实例
def buildConnectionString(params): """Build a connection string from a dictionary Ret ...
- Sublime Text3 编辑器我的最爱
简介 Sublime Text 3是一个神奇的文本编辑器,适合程序员.作家.它有很多亮点功能,比如多选择.Go Anything.命令面板.多选择可以让你同时编辑多出代码,Got Anything 像 ...
- 关于微信小程序图片失真的解决方案
今天来说一说 关于微信小程序的图片失真问题的解决,微信小程序的image标签要设置其宽高,不然图片若宽高过大会撑开原始图片大小的区域:如下 但是宽高设置固定了会导致有些图片和规定显示图片大小的比例不一 ...
- MongoDB Sharding
sharding集群中的组件: 1.mongos:router,可以通过keepalived实现高可用. 2.config server:元数据服务器,这里要借助zookeeper存放配置信息. 3. ...
- JAVA优化建议
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...
- centos 6.5 搭建ftp服务器
linux下一般使用vsftpd作为ftp服务器. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用. 下面是安装配置步骤: 1.安装vsftpd yum i ...