1. 程式人生 > >【杭電100題】【貪心】2037 今年暑假不AC(活動安排問題)

【杭電100題】【貪心】2037 今年暑假不AC(活動安排問題)

今年暑假不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永遠無法理解我一直很想對它說的一句話:

“好喜歡你,知不知道”