题意:

对于给出的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 贪心的更多相关文章

  1. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  2. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  7. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

  8. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

    SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...

  9. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

随机推荐

  1. appium--Toast元素识别

    前戏 Android中的Toast是一种简易的消息提示框,当视图显示给用户,在应用程序中显示为浮动,和Dialog不一样的是,它永远不会获得焦点,无法被点击 Toast类的思想就是尽可能不引人注意,同 ...

  2. 洛谷P4593 [TJOI2018]教科书般的亵渎

    小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为\(a_i\)​,且每个怪物血量均不相同,小豆手里有无限张"亵渎".亵渎的效果是对所有的怪造成\(1\)点伤害,如果 ...

  3. 第四次实验报告:使用Packet Tracer理解RIP路由协议

    目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 测试网络连通性 3.4 理解RIP路由表建立和更新 4. 理解RIP消息传得慢 5. 拓展 1 实 ...

  4. 明解C语言 入门篇 第五章答案

    练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...

  5. SpringBoot之Swagger2文档生成

    SpringBoot之Swagger2文档生成 1.Swagger2介绍 编写和维护接口文档是每个程序员的职责,前面我们已经写好的接口现在需要提供一份文档,这样才能方便调用者使用.考虑到编写接口文档是 ...

  6. unix高级环境编程学习笔记第七章(未完)

    博客地址:http://www.cnblogs.com/zengjianrong/p/3222081.html 7.1 引言 Main函数调用:命令行参数:存储器布局:如何分配存储器:进程使用env: ...

  7. 使用eclipse git插件合并merge部分代码方法

    当有一个父项目,它的下面有多个子项目:或者一个项目下边,只想合并部分路径,甚至部分文件的内容,使用下边的方法可以达到目的,特此记录: 1.主项目右键 -> team -> remove f ...

  8. Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer。。。。。检查一下servlet-api是否冲突了?

    原因:jar包发生冲突.在我的pom.xml文件中 <dependency>      <groupId>javax.servlet</groupId>       ...

  9. 《STL源码剖析》——Array

    array array本身内容较少,日常使用也不是很多,里面也没有很高深的技巧 1 array的基本架构 了解array的架构需要一个额外的语法知识: int a[100]; int [100]b; ...

  10. js计算两经纬度之间的距离

    js如下: // 方法定义 lat,lng function GetDistance( lat1, lng1, lat2, lng2){    var radLat1 = lat1*Math.PI / ...