【杭電100題】【貪心】2037 今年暑假不AC(活動安排問題)
阿新 • • 發佈:2018-11-12
今年暑假不AC
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 77466 Accepted Submission(s): 41512
Problem Description
假設你已經知道了所有你喜歡看的電視節目的轉播時間表,你會合理安排嗎?(目標是能看盡量多的完整節目)
Input
輸入資料包含多個測試例項,每個測試例項的第一行只有一個整數n(n<=100),表示你喜歡看的節目的總數,然後是n行資料,每行包括兩個資料Ti_s,Ti_e (1<=i<=n),分別表示第i個節目的開始和結束時間,為了簡化問題,每個時間都用一個正整數表示。n=0表示輸入結束,不做處理。
Output
對於每個測試例項,輸出能完整看到的電視節目的個數,每個測試例項的輸出佔一行。
#include <iostream> using namespace std; int n; int st[101]; int ed[101]; int cnt; int curend; void inputAndInit(); int greedy(); int main() { while(cin>>n&&n) { inputAndInit(); cout<<greedy()<<endl; } return 0; } void inputAndInit() { //輸入資料 for(int i=0; i<n; i++) { cin>>st[i]>>ed[i]; } //按照結束時間升序排序 for(int i=0; i<n; i++) { for(int j=i; j<n; j++) { if(ed[i]>ed[j]) { swap(st[i],st[j]); swap(ed[i],ed[j]); } } } cnt=0; curend=0; } int greedy() { for(int i=0; i<n; i++) { if(curend<=st[i]) { cnt++; curend=ed[i]; } } return cnt; }
【2018/11/9後記】
1.這道題跟活動安排問題完全一樣,最簡單的貪心題目。
這道題就是當年我沒學演算法的時候卡了很久的那道題,
這道題我現在已經可以一遍AC了,
這道題……把當初幼稚且一腔熱血的我,和現在勤勤懇懇且依舊熱血的我奇妙的聯絡了起來。
2.這輩子最遺憾的事就是,電腦永遠無法承載我對它的愛,程式碼永遠不會知道它曾是我的心血和珍寶,AI永遠無法理解我一直很想對它說的一句話:
“好喜歡你,知不知道”