选择不相交区间(贪心算法) By ACReaper

题目的分析被说得有点绕。自己理解是这样,首先由题目我们知道选择的区间都是相互不相交的,除这之外,我们的目标是尽量的让选择的区间达到最大化。

所以我们可以先对齐排序,因为输入是随机的。假设每个区间表示为(x,y)我们可以选择按照x排序所有区间,也可以选择按照y来排序所有区间。而不管选择哪一个来排序,其原理和本质都一样,都是为了方便操作,将其有序化。

我们这里选择按照y来排序,排序完后有y1 <= y2 <= y3.......

现在我们讨论x1 x2 ....

当x1 > x2时,区间被x2这个区间包含,所以选择x1这个区间更为划算。

而当x1 < x2时,当x2 > y1时,区间互不相交,先选x1区间,接着选x2区间

当x1 < x2 && x2 <=y1 时,两个区间相交,这时,如果选择了x2区间,就不能选择x1区间,反之亦然。

但要选择哪一个呢?我们知道如果不选x2也就是选x1,则我们此时把x1分成两半部分,一部分在x2内,如果选择了x2,x2区间不仅包含了x1的,还可能包含x3区间的,因为x2的长度肯定大于或等于x1区间的长度,也就是说从概率上讲,选x2肯定不如选x1划算。

综上所述:这个问题第一次一定要选择x1,接着就是把相交部分去掉,循环选不想交的。


#include <stdio.h>typedef struct zone{int x;int y;
}zone;
zone A[1000];
//快速排序接口 
int partition(zone A[],int st,int ed){zone key = A[st];int j = st;for(int i = st + 1; i <= ed; i++){if(A[i].y <= key.y){j++;zone temp = A[i];A[i] = A[j];A[j] = temp;}}zone temp = A[j];A[j] = A[st];A[st] = temp;return j;
}
void quicksort(zone A[],int st,int ed){if(st < ed){int mid = partition(A,st,ed);quicksort(A,mid + 1,ed);quicksort(A,st,mid - 1);}}
//快速排序接口 
#define MAXN 1000
int path[MAXN]; 
int main(){int n;while(scanf("%d",&n) != EOF){for(int i = 0 ; i < n; i++){scanf("%d%d",&A[i].x,&A[i].y);//input (x,y) } quicksort(A,0,n - 1);int len = 0,i = 1;zone key = A[0];path[len++] = 0;while(i < n){if(key.y < A[i].x){//true 则把A[i]拓展进来 path[len++] = i;key = A[i]; }	i++;}for(int i = 0; i < len; i++){printf("(%d,%d) ",A[path[i]].x,A[path[i]].y);}}return 0;
} 


转载于:https://www.cnblogs.com/sixcoder/archive/2013/04/05/3826017.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path

zendframework的示例index.php里有这样一句 set_include_path(. . PATH_SEPARATOR . ../library/. PATH_SEPARATOR . ./application/models/. PATH_SEPARATOR . ./application/lib/. PATH_SEPARATOR . get_include_path()); 不知道 PATH_SEPARATOR是什么&#xff0c;其实就是…

数据库笔记(数据库操作)

1.windows系统下 数据库启动 net start mysql 2.连接与断开服务器 MySQL -h 地址 -p 端口 -u 用户名 -p 密码 3.查看当前数据库 select database(); 4.显示当前时间&#xff0c;用户名&#xff0c;数据库版本 select now(),user(),version(); 5.创建库 1.create data…

转使用jQuery Ajax的内存回收

通过查看jquery API&#xff0c;发现jquery还有一个 complete对象&#xff0c;是请求完成后回调函数 (请求成功或失败之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以&#xff0c;我们只需要在请求完成后&#xff0c;将传回的XMLHttprequest对象手工回收即可&am…

java面向对象(引用类型--参数传递)

/* 基本数据类型&#xff1a;方法调用&#xff0c;传的是具体数据 引用数据类型&#xff1a;方法调用&#xff0c;传的是地址*/ class person{String name;public void eat(){System.out.println("persion里调用的"name);} }public class chuancan {public static vo…

Oracle中的Round和Trunc

一、Oracle中的Round和Trunc&#xff1a; 如同对数字进行四舍五入和按位截取一样&#xff0c;Oracle对时间日期也提供了这两种功能。但比起对数字进行四舍五入和截取比较复杂&#xff1a;这是因为时间日期是有格式的。下面看看这两个函数的定义和用途&#xff1a;ROUND(date [,…

私有化成员变量

/*** 封装**/ import java.util.Scanner; class People{String name; private int age ;//私有化变量&#xff0c;只有成员变量可以用&#xff0c;局部变量不可以用//定义一个方法public void eat(){System.out.println(name"..."age);}//判断输入的值是否合理public…

htaccess文件,强大的功能

1. 運用.htaccess 樹立自定義的出錯頁面。對付Linux Apache來講這是一項極其簡單的事情。運用上面的.htaccess語法你可以輕松的實現這一服從。&#xff08;把.htaccess放在你的web根目次下&#xff09; ErrorDocument 401 /error/401.phpErrorDocument 403 /error/403.phpError…

封装(私有化成员变量,获取变量值)

/* 变量&#xff1a;操作赋值变量----setxxx获取变量的值----getxxx 内容&#xff1a;创建一个方法&#xff0c;人类1属性&#xff1a;名字&#xff0c;年龄方法&#xff1a;说我是xx年龄xx 要求&#xff1a;成员变量全部私有使用公共访问方法操作变量*/ import java.util.Scan…

java适配器模式

Java适配器模式 &#xff08;摘自百度文库&#xff09; 问题引出&#xff1a;大家生活中可能碰到的一个问题就是你新买的手机自带的耳机是2.5接口的&#xff0c;不幸的是有一天你的耳机坏了&#xff0c;你去市面上根本就找不到2.5的耳机了&#xff0c;基本上是3.5接口了&#x…

封装(构造方法,构造器)

/* 构造方法&#xff1a;构造器 作用&#xff1a;建立对象的时候&#xff0c;对类中成员变量初始化&#xff0c; 1.构造方法的名字必须与类的名字相同 2.构造方法没有返回值 3.没有return 4.调用对象的时候直接调用构造方法&#xff0c;不需要再次调用 5.创建对象的时候&#x…

矩形嵌套

1 /*2 不是贪心&#xff0c;若是先按长排序在按宽&#xff0c;若是长很大宽很小 ,则若是后边款稍微大一些就不行了 3 */4 #include <stdio.h>5 #include <iostream>6 #include <cstring>7 #include <algorithm>8 using namespace std;9 10 const int …

继承(父类,子类的继承方式,成员变量、静态变量的引用方法)

/* 继承&#xff1a; 1.子类继承父类 2.java只支持单继承&#xff0c;不支持多继承&#xff0c;但是可以家族继承 3.父类在方法区创建完成后&#xff0c;子类创建时会带有父类标签&#xff08;方便找到父类&#xff09; 4.子类在堆中开辟空间时&#xff0c;父类的成员变量和私有…

【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结...

去年就知道有这个功能&#xff0c;不过没去深究总结过&#xff0c;最近有写网络博客的欲望了&#xff0c;于是又重新拾起这玩意儿。 具体到底是用Windows Live Writer 2012还是用Word 2013&#xff0c;个人觉得看个人&#xff0c;因为这2个软件各有优点&#xff0c;各有缺点。 …

继承(继承父类,super)

/* 手机类&#xff1a;第一代功能&#xff1a; 1.打电话:键盘输入手机号码 2.接电话&#xff0c;显示来电号码&#xff0c;铃声提示第二代功能&#xff1a; 1.打电话&#xff1a;键盘输入手机号码 2.接电话&#xff0c;显示来电号码&#xff0c;显示归属地&#xff0c;彩铃提示…

modelsim 安装后运行,出现fatal License Error

参考一下连接地址&#xff1a; 1.http://blog.163.com/anson_an0908/blog/static/1873498452012719101835153/ 2.http://hi.baidu.com/mark_lewis/item/4ea2d6d172307094270ae767 3.http://www.cnblogs.com/oomusou/archive/2008/02/04/1064193.html 这个看完&#xff0c;应该就…

学生标准类

/* 请写出一个标准的学生类(Student)Student:成员变量&#xff1a;name,age,sex构造方法&#xff1a;无参构造方法&#xff0c;带三个参数的构造方法成员方法&#xff1a;A:get/set方法B:把所有成员变量的值输出的方法(show)*/ class Student3 {private String name;private in…

实现、设置-Android TabWidget-by小雨

查了好多资料&#xff0c;发现还是不全&#xff0c;干脆自己整理吧&#xff0c;至少保证在我的做法正确的&#xff0c;以免误导读者&#xff0c;也是给自己做个记录吧&#xff01; 首先先看一个小例子&#xff0c;接着讲授理原 TabTest.java view plaincopy to clipboardpr…

多态(继承父类的非静态重写方法)

/* 1.多态&#xff1a;程序中研究对象的多态 2.People p new Person&#xff08;&#xff09;;转换为父类 变量 new 子类&#xff08;&#xff09;&#xff1b; 3.意义&#xff1a;单继承下&#xff0c;可以无限扩展&#xff0c;满足扩展性 4.前提&#xff1a;必须有继承方法…