1、簡單描述
給出n個連續區間,區間元素只包含整數,在數軸上任取一些元素構成集合a,使所給出的每個區間都至少有兩個元素與該區間中元素相同,a中至少有多少元素?
2、思路
#include#include#includeusing namespace std;
struct node
a[10001];
bool cmp(node a,node b)
int main()
sort(a,a+n,cmp);
int s=2,t1=a[0].r,t2=a[0].r-1;
for(i=1;i=a[i].l)
continue;
else if(t2=a[i].l)
else if(t2貪心。
先對所有區間按末端點排序
取第i個區間的最後兩個元素1和2
若第i+1個區間包含了這兩個元素,則跳到下乙個區間所取的元素個數+0
若第i+1個區間只包含了這兩個元素中的乙個,已經進行排序,一定包含元素2,則取第i+1個區間的最後乙個元素,所取的元素個數+1。為了方便下一區間的比較,更新1和2的值,使他們為當前a集合中最後的兩個元素。
若第i+1個區間沒有包含這兩個元素,則第i+1個區間的最後兩個元素,所取的元素個數+2。為了方便下一區間的比較,更新1和2的值,使他們為當前a集合中最後的兩個元素。
1初始化為第乙個區間的倒數第2個元素
2初始化為第乙個區間的最後的元素
所取的元素個數初始化為2 (就是selem和eelem)
貪心 區間貪心
給出n個開區間 x,y 從中選擇盡可能多的開區間,使得這些開區間兩兩沒有交集。先對左端點 從大到小 排序,如果左端點相同就對右端點從小到大排序。區間不相交問題 include include using namespace std const int maxn 110 區間結構體 struct in...
(貪心)整數區間
題目 找到乙個含元素個數最少的集合,使得對於每乙個區間,都至少有乙個整數屬於該集合,輸出該集合的元素個數。輸入 首行包括區間的數目n,1 n 10000,接下來的n行,每行包括兩個整數a,b,被一空格隔開,0 a b 10000,它們是某乙個區間的開始值和結束值。輸出 第一行集合元素的個數,對於每乙...
區間貪心總結
一 線段覆蓋 n個開區間 ai,bi 選擇盡量多個區間,使得這些區間兩兩不相交 右端點排序 兼顧左端點 再從左到右遇到不相交的就選 sort he 1,he n 1,cmp int tot 0,now 1000 for int i 1 i n i printf d tot 二 區間選點 n個閉區間 ...