hdu2037 ACなしでこの夏[貪欲] [インターバルスケジューリング問題]

トピックスアドレス

hdu2037

カジュアルワーキング


コードと解説

貪欲使用してこの問題。最短時間で最も早い開始時間、最も初期の終了時間:3つの貪欲な戦略があります。それはあなたが見ることができる複数のプログラムの後ろに、オーバー早くであるため、2番目は、正しい戦略です。
私は、終了時間の値が小さく、高い優先度であるにプライオリティキューをソートするために使用されます。
次のようにC ++のコードは次のとおりです。

#include<iostream>
#include<queue>
using namespace std;
struct node{
    int Beg;
    int End;
    friend bool operator<(node n1,node n2){
        return n1.End>n2.End;//End小的优先级高 
    }
}TV;
int main()
{
    int n;//节目总数
    int count;//最多可以看完的节目总数 
    int last_end;
    while(~scanf("%d",&n)&&n){
        priority_queue<node>chn;
        while(n--){ 
            scanf("%d%d",&TV.Beg,&TV.End);
            chn.push(TV);
        }
        count=1;//可以看完第一个节目 
        last_end=chn.top().End;//第一个看完的节目的结束时间 
        /*while(!chn.empty()){
            printf("%d %d\n",chn.top().Beg,chn.top().End);
            chn.pop();
        }*/
        while(1){
            if(chn.empty()) break;
            if(chn.top().Beg>=last_end){//可以看这个节目 
                count++;
                last_end=chn.top().End;
                chn.pop();
            }               
            else{//不能看这个节目 
                chn.pop();
            }
        }
        printf("%d\n",count);
    } 
}

参照

貪欲なアイデア:
ステップバイステップ、と一歩を見て、
各ステップで、最高の現在の選挙は、
戻って見ていない、既存の選択を変更しないでください。
貪欲な方法は、現在選択に関する既存の情報に基づいて行われ、一度選択をした、どんな将来の結果、この選択は変更されません。言い換えれば、欲だけで作られた局所解の意味でそれを選択し、全体を検討するための最良の方法ではありません。
このような局所最適な選択は、常に全体の最適解(最適解)を取得されていませんが、通常は最適解に近い(近最適解)を得ることができます。

  • 前記問題を解決するための貪欲法は:
    1)最適サブ構造特性
    最適解を含有する最適解はまた、最適に満足の問題として知られている、準最適構造特性この問題を呼び出すサブ問題場合原則。
    2)の貪欲な性質を選択し
    、いわゆる貪欲選択が最適解の全体的な性質は貪欲選択肢を得るために、すなわち、部分的に、一連の最良の選択かもしれませんです。
  • 貪欲ルールは通常の選択肢のシリーズを作るために貪欲なトップダウン方式である一方、各サブ問題を解決するための動的なプログラミング方法は、ボトムアップ的に通常です。

おすすめ

転載: www.cnblogs.com/hardcoreYutian/p/11455556.html