poj 1716(贪心)
来源:互联网 发布:关于编程的书 编辑:程序博客网 时间:2024/04/28 23:48
题意:给出数轴上的n个区间,每个区间都是连续的int区间。现在要在数轴上任意取一堆元素,构成一个元素集合V,要求每个区间和元素集合V的交集至少有两个不同的元素求集合V最小的元素个数。
解题思路:
考虑到区间之间的重叠性,所以每次都要尽可能地去每个区间靠后的值,才能保证前后两个区间公共的元素最多,其实把握了这个思想后就是个简单的贪心思想了。一开始我是拿每个区间的开始端进行排序,结果WA。。。后面才想到,如果两个区间是包含的关系,那么这样会出现问题。
AC:
#include<iostream>#include<algorithm>using namespace std;typedef class{public:int s,e;}interval; //间隔(区间)int cmp(const void* a,const void* b){interval* x=(interval*)a;interval* y=(interval*)b;return (x->e) - (y->e); //对区间按末端点排序}int main(void){int n; //区间数while(cin>>n){interval* inter=new interval[n];for(int i=0;i<n;i++)cin>>inter[i].s>>inter[i].e;qsort(inter,n,sizeof(interval),cmp); //对区间按末端点排序int Selem=inter[0].e-1 , Eelem=inter[0].e; //当前区间所取的两个元素,初始化为第0个区间最后两个元素int sum=2; //至少取sum个元素才能保证每个区间至少含有其中的2个元素for(int k=1;k<n;k++)if(inter[k].s<=Selem) //前一个区间所取的两个元素都在当前区间内continue; //则当前区间无需取任何元素else if(inter[k].s<=Eelem) //前一个区间所取的只有一个元素在当前区间内{Selem=Eelem;Eelem=inter[k].e; //按序更新当前区间所取的两个元素:Selem与Eelemsum++; //Eelem是新取的一个元素}else //前一个区间所取的没有一个元素在当前区间内{Selem=inter[k].e-1;Eelem=inter[k].e; //按序更新当前区间所取的两个元素:Selem与Eelemsum+=2; //Selem与Eelem是新取的两个元素}cout<<sum<<endl;delete inter;}return 0;}
0 0
- poj 1716(贪心)
- poj-1716【贪心】
- poj 1716 贪心 Integer Intervals
- poj 1716 Integer Intervals (贪心)
- (Relax 贪心1.7)POJ 1716 Integer Intervals
- poj 1716 贪心(整数区间:2-覆盖)
- POJ 1716 Integer Intervals(贪心)
- 【Poj】-1716-Integer Intervals(贪心)
- POJ:1716 Integer Intervals(贪心)
- poj 1201 1716 (贪心+树状数组)
- poj 1017 Packets【贪心】
- POJ 1017 Packets(贪心)
- POJ 1323 简单贪心
- POJ 1065 (贪心)
- POJ 1328 贪心
- POJ 1018 贪心思想
- POJ 1089 贪心算法
- poj 1017 Packets(贪心)
- 重构——DataTable转泛型
- MinGW安装
- 如何禁止App在后台运行以及如何保存和恢复App的状态
- 更新NCBI中taxdmp数据
- bzoj2882 工艺
- poj 1716(贪心)
- usaco training 1.3奶牛回文
- CSS基础研究(一)-各种各样的选择器
- JAVA安装——Windows
- Codeforces 625D ---- Finals in arithmetic
- git常用命令速查表
- abstract class和interface的使用场景分别是什么?
- Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
- A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Ecl