這是一道模板題,這個題考的是區間覆蓋問題;
首先引入乙個非常經典的例題:《今年暑假不ac》,題目大致如下:
problem description
「今年暑假不ac?」
「是的。」
「那你幹什麼呢?」
「看世界盃呀,笨蛋!」
「@#$%^&*%...」
(1).開始時間最短
(2).結束時間最短
(3).用時最短
要想在一定時間內看數量最多的電視節目,我們只能選擇(2)方案。為什麼呢(大佬們自動忽略一下內容)?
(1)方案在於開始時間最短,但是乙個節目如果開始時間最短但遲遲不結束就會消耗時間,不可取
(3)方案注重總用時最短,但是總用時最短也不代表可以看最多的電視節目,也不可取。
於是我們得到了策略,以結束時間最短来作為貪心策略。
那就好辦了,主要的貪心內容如下:
對最早結束時間進行貪心,演算法步驟如下:
(1)把n個活動按結束時間排序。
(2)選擇第1個結束的活動,並刪除(或跳過)與它時間相衝突的活動。
(3)重複步驟(2),直到活動為空。每次選擇剩下的活動中最早結束的那個活動,並刪除與它時間衝突的活動。
用圖來解釋或許更形象:
然後題目就可以解決了,**如下:
#includeusing那麼,《今年暑假不ac》講畢,回到正題;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**如下:(注意資料範圍)
#includeusingnamespace
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 線段覆蓋
話說個人覺得前面的幾篇並不是很好,其實沒有那麼難,也沒有那麼長 很久以前就看到了,但貌似一直認為自己的演算法是錯誤的,結果交上去發現是正解 首先按照時間排序 貪心 結束時間早 盡可能不影響後面的比賽 的在前,若結束時間相同,則開始時間晚 盡可能不影響前面的比賽 的在前。如果兩者的判斷順序反了,就把最...