hdu1677 贪心
题意:
对于给出的n个俄罗斯套娃,要求将这n个套起来(满足w1 < w2 && h1 < h2才能套进去),最后输出最少剩下的套娃个数(尽可能去套起来)
题目分析:
朴素的贪心,类似于最少导弹拦截系统那题,首先一样的是排序,但是排序的要先按w升序,在w相同的时候用降序排,为什么呢,这里想举个例子我们输入的为(20 13)(20 14)(20 15)(30 20)(40 14)如果按照w和h都为升序,然后我们按照贪心的思想,将第一个作为基准,从第二个开始取出来和已有的比较,如果能套就套上去,不能套就后移,尝试完所有的已有的都不能套上去则将这个套娃放入数组的最后(新建一个),那么此时这个方案的最终情况如下:
30 20
20 13 20 14 20 15 40 14
而如果我们按照w升序,而h降序排序后(20 15)(20 14)(20 13)(30 20)(40 14)方案的最终如下:
30 20 40 14
20 15 20 14 20 13
此时我们明白,对于w从小到大排序之后,我们每取一个的后一个w一定满足大于等于前者(w已经升序排序),而每一个后面的套娃应该与前面的高度从大到小去比较,尽可能将小的高度留给后面虽然宽度更大但是高度可能较小的套娃(可以套上去而不至于新开一个)
代码:
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std; struct Node{
int w, h;
}k[], ans[]; bool cmp(Node a, Node b){
if(a.w == b.w) return a.h > b.h;
else return a.w < b.w;
} int main(){
int t;
scanf("%d", &t);
while(t--){
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d%d", &k[i].w, &k[i].h);
sort(k+, k+n+, cmp);
int cnt = ;
ans[cnt].w = k[cnt].w;
ans[cnt].h = k[cnt].h;
for(int i = ; i <= n; i++){
int flag = ;
for(int j = ; j <= cnt; j++){
if(ans[j].w < k[i].w && ans[j].h < k[i].h){
flag = ;
ans[j].w = k[i].w;
ans[j].h = k[i].h;
break;
}
}
if(flag == ){
cnt++;
ans[cnt] = k[i];
}
}
printf("%d\n", cnt);
}
return ;
}
hdu1677 贪心的更多相关文章
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...
- 【贪心】HDU 1257
HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...
随机推荐
- ASP.NET开发实战——(五)ASP.NET MVC & 分层
上一篇文章简要说明了MVC所代表的含义并提供了详细的项目及其控制器.视图等内容的创建步骤,最终完成了一个简单ASP.NET MVC程序. 注:MVC与ASP.NET MVC不相等,MVC是一种开发模式 ...
- 详解 ASP.NET Core MVC 的设计模式
MVC 是什么?它是如何工作的?我们来解剖它 在本节课中我们要讨论的内容: 什么是 MVC? 它是如何工作的? 什么是 MVC MVC 由三个基本部分组成 - 模型(Model),视图(View)和控 ...
- MySQL实战45讲学习笔记:第八讲
一.今日内容概要 我在第 3 篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事 ...
- Linux网络编程综合运用之MiniFtp实现(一)
春节过后,万物复苏,在这元宵佳节的前一天,决定继续开启新年的学习计划,生命在于运动,提高源于学习,在经过漫长的Linux网络编程学习后,接下来会以一个综合的小项目来将所学的知识点综合运用,首先是对项目 ...
- Ubuntu18.04开机挂载硬盘
一.查看磁盘信息 fstab文件的格式如上,其中: 1.设备文件名称是指磁盘或分区的文件名称,也可以使用label或uuid.UUID可以通过"sudo blkid"命令 ...
- 第四次实验报告:使用Packet Tracer理解RIP路由协议
目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 测试网络连通性 3.4 理解RIP路由表建立和更新 4. 理解RIP消息传得慢 5. 拓展 1 实 ...
- Pandas学习
Pandas的安装 MAC pip3 install pandas 若遇到管理员权限问题,加上sudo 接下来我们开始使用pandas 我们先构建一个一维序列: s = pd.Series( [3, ...
- 《Interest Rate Risk Modeling》阅读笔记——第五章:久期向量模型
目录 第五章:久期向量模型 思维导图 久期向量的推导 久期向量 广义久期向量 一些想法 第五章:久期向量模型 思维导图 久期向量的推导 \[ V_0 = \sum_{t=t_1}^{t_n} CF_t ...
- snap应用多版本卸载
Ubuntu18.04新增了几个内置软件使用Snap格式.同样的沙箱式处理方式,除了Canonical主推的Snap,还有Fedora的Flatpak和AppImage.一般正常使用没问题,就是第一次 ...
- CopyOnWriteArraySet 源码分析
CopyOnWriteArraySet 源码分析: 1:数据结构: private final CopyOnWriteArrayList<E> al; 内部维护的是一个CopyOnWri ...