洛谷P1803 凌亂的yyy 線段覆蓋

2022-09-20 08:06:09 字數 1511 閱讀 3675

這是一道模板題,這個題考的是區間覆蓋問題;

首先引入乙個非常經典的例題:《今年暑假不ac》,題目大致如下:

problem description

「今年暑假不ac?」

「是的。」

「那你幹什麼呢?」

「看世界盃呀,笨蛋!」

「@#$%^&*%...」

(1).開始時間最短

(2).結束時間最短

(3).用時最短

要想在一定時間內看數量最多的電視節目,我們只能選擇(2)方案。為什麼呢(大佬們自動忽略一下內容)?

(1)方案在於開始時間最短,但是乙個節目如果開始時間最短但遲遲不結束就會消耗時間,不可取

(3)方案注重總用時最短,但是總用時最短也不代表可以看最多的電視節目,也不可取。

於是我們得到了策略,以結束時間最短来作為貪心策略。

那就好辦了,主要的貪心內容如下:

對最早結束時間進行貪心,演算法步驟如下:

(1)把n個活動按結束時間排序。

(2)選擇第1個結束的活動,並刪除(或跳過)與它時間相衝突的活動。

(3)重複步驟(2),直到活動為空。每次選擇剩下的活動中最早結束的那個活動,並刪除與它時間衝突的活動。

用圖來解釋或許更形象:

然後題目就可以解決了,**如下:

#includeusing

namespace

std;

struct

node

a[110

];bool

cmp(node x,node y)

intmain()

sort(a,a+n,cmp);

int sum=0;//

統計最多可以看多少節目

int last=-1

;

for(int i=0;i)

} printf("%d

",sum);

}

那麼,《今年暑假不ac》講畢,回到正題;

其實,正題和這道題可以說是乙個模子刻出來的,ac**如下:(注意資料範圍)

#includeusing

namespace

std;

struct

node

a[100010

];bool

cmp(node x,node y)

intmain()

sort(a,a+n,cmp);

long

long sum=0;//

統計最多可以看多少節目

int last=-1

;

for(int i=0;i)

} printf(

"%lld

",sum);

}

洛谷P1803凌亂的yyy

快noip了,yyy很緊張!現在各大oj上有n個比賽,每個比賽的開始 結束的時間點是知道的。yyy認為,參加越多的比賽,noip就能考的越好 假的 所以,他想知道他最多能參加幾個比賽。由於yyy是蒟蒻,如果要參加乙個比賽必須善始善終,而且不能同時參加2個及以上的比賽。輸入格式 第一行是乙個整數n 接...

洛谷 P1803 凌亂的yyy

快noip了,yyy很緊張!現在各大oj上有n個比賽,每個比賽的開始 結束的時間點是知道的。yyy認為,參加越多的比賽,noip就能考的越好 假的 所以,他想知道他最多能參加幾個比賽。由於yyy是蒟蒻,如果要參加乙個比賽必須善始善終,而且不能同時參加2個及以上的比賽。輸入格式 第一行是乙個整數n 接...

洛谷 P1803 凌亂的yyy 線段覆蓋

話說個人覺得前面的幾篇並不是很好,其實沒有那麼難,也沒有那麼長 很久以前就看到了,但貌似一直認為自己的演算法是錯誤的,結果交上去發現是正解 首先按照時間排序 貪心 結束時間早 盡可能不影響後面的比賽 的在前,若結束時間相同,則開始時間晚 盡可能不影響前面的比賽 的在前。如果兩者的判斷順序反了,就把最...