程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 算法-貪心的一個經典問題,,,

算法-貪心的一個經典問題,,,

編輯:編程綜合問答
貪心的一個經典問題,,,

圖片說明
輸入

第1行:1個數N,線段的數量(2 <= N <= 10000)
第2 - N + 1行:每行2個數,線段的起點和終點(-10^9 <= S,E <= 10^9)

輸出

輸出最多可以選擇的線段數量。

輸入示例

3
1 5
2 3
3 6

輸出示例

2

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef struct {
    long long tb;
    long long te;
} TIME;
TIME TIME_TABLE[10007];
bool cmp(TIME a,TIME b) 
{
    return (a.te < b.te);
}
int N;

int main()
{   
    int cnt;
    int ans;
    while(~scanf("%d",&N))
    {
        if(N == 0) break;
        //默認的ans是1 
        ans = 1;
        cnt = 0;
        //將存放時間的數組排序 
        for(int i = 0;i < N;i++) 
            scanf("%ld%ld",&TIME_TABLE[i].tb,&TIME_TABLE[i].te);
        sort(TIME_TABLE,TIME_TABLE+N,cmp);

        for(int i = 1;i < N;i++) {
        //如果有序數組(按照結束時間從小到大排序)
        //的第i項的開始時間比目前選定的一項(cnt)的結束時間要晚 
        //那麼就把它當做下一個cnt,然後ans計數加一 
            if(TIME_TABLE[i].tb >= TIME_TABLE[cnt].te) {
                cnt = i;
                ans++;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
} 

結果最後是WA。。各位大神幫忙看看

最佳回答:


一個經典的問題
經典貪心乘船問題
來講一個經典老問題
----------------------biu~biu~biu~~~在下問答機器人小D,這是我依靠自己的聰明才智給出的答案,如果不正確,你來咬我啊!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved