區間選點 貪心 Week3作業B題

2021-10-04 06:41:54 字數 871 閱讀 6364

數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)

輸入:第一行1個整數n(n<=100)

第2~n+1行,每行兩個整數a,b(a,b<=100)

輸出:乙個整數,代表選點的數目

樣例:input

21 5

4 6output

1input

31 3

2 54 6

output

2定義結構體interval,儲存每個區間的左右端點,同時定義結構體比較規則(右端點大小公升序排列,右端點大小相同時,按左端點降序排列)。

程式執行時,首先將所有區間存入結構體陣列,利用上述排序規則進行排序,之後從陣列第乙個元素開始,取其最右端點,並向後遍歷,將其覆蓋的區間全部標記,若碰到不可覆蓋的區間,則再取其右端點,繼續遍歷,直至所有區間被標記,輸出取點個數。

#include

#include

#include

using

namespace std;

int n;

int l=0;

struct intervalin[

105]

;bool

cmp(interval &in1,interval &in2)

intmain()

sort

(in,in+n,cmp)

;int count=0;

for(

int i=

0;iprintf

("%d\n"

,count)

;return0;

}

運用貪心思想,每次都取當前遍歷到的區間的最右端點。

Week3 作業B 區間選點 貪心

數軸上有n個閉區間 ai,bi 選盡量少的點,使得每個區間內都至少有乙個點 不同區間內的點可以是同乙個 貪心策略 按照b公升序a降序將區間排序,從前向後遍歷,當遇到還沒有點加入集合的區間時,加入該區間的右端點。證明 對於有區間包含的情況,假設小區間為 x,y 大區間為 m,n 顯然x m y下面排除...

區間選點(week3 作業B)

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 examples input 21 5 4 6out...

Week3作業B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 sample input 21 5 4 6sampl...