貪心 V 公共區間最少元素

2021-07-31 10:24:13 字數 765 閱讀 2176

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個閉區間 ...