貪欲タイトル

動的なプログラミングのアイデア:

https://blog.csdn.net/huang1600301017/article/details/81022658

貪欲アルゴリズムの訓練:

https://blog.csdn.net/EliminatedAcmer/article/details/88402667

 

https://blog.csdn.net/gyhguoge01234/article/details/78156417

 

 

思考:ジョンソンアルゴリズム:
1の2つのタスク、タスククラスT1 <T2、タスククラスBのT1> T2 =に分割
2は、2つのタスクは、クラスAによって順序付けされる昇順T1、カテゴリBに従って降順にT2
3:2種類の、最初のクラスの後に2番目のタスクにタスクの種類、最高の仕事の後、一連のマージ
4:すべてのタスクを通じて、合計時間を計算し
、私はそれを理解すると言うの下に、それは間違いなく、T1のために仕事されています従って、実行、ジョブt2のアイドル状態が存在することになると最小時間がかかり、明らかに許可されていない空き状況に応じて、状況の二種類を重ね、第1ジョブT1 <T2とT1実行の増加順に従って可用性は、残りの操作に、表示されない場合、T1> T2 =ジョブは、ジョブが蓄積、T2のままで、場合ジョブごとに、T1 = T2以降、T2ジョブ積層仕事>加工意志でありますそれが最小になるように最初は、T2の降順にそれでは、T1> = T2ジョブの実行、最終的にT2以上増加保持は時間がかかるであろう、大T2の最初の実装であろうように、ますます小さくなって消費します。

/ * 
ジョンソンアルゴリズム:
1の2つのタスク、タスククラスT1 <T2、タスククラスBのT1> T2 =に分割
2:2つのタスクは、クラスAによって順序付けされる昇順T1、カテゴリBに従って降順にT2 
3:2つのタスクにタスクの第一のタイプの背後にある第2のタイプのタスク最良の現時点で配列マージ
すべてのタスク、合計時間を計算するスルー:4 
* / 
の#include <iostreamの> 
する#include <アルゴリズム> 
 使用して 名前空間を; STD 
のtypedef ロング ロングLL、
 
構造体ノード{
     int型の時間;
     INT ID;
     BOOL グループ;
     BOOLの 演算子 <(constのノード&P){
         戻り時間< p.timeを; 
    } 
}; 
 
のconst  int型MAX_N = 50005 ;
int型のn;
INT [MAX_N]、[MAX_N] B。
ノードD [MAX_N]。
INT [MAX_N]最高。
 
int型のmain()
{ 
    IOS :: sync_with_stdio(); 
    cinを >> N;
    以下のためにint型 i = 0 ; iがn <; iは++ 
        CIN >> [I] >> B [i]は、
    以下のためにint型 i = 0 ; iは<N; iは++ ){ 
        D [i]は.timeは = [I]> [I] B?B [I]:[i]は、
        D [i]は.ID = iは、
        D [i]は.group= [I] <=のB [i]は、
    } 
    ソート(D、D + N)。
    INTは L = 0、R = N- 1 ;
    以下のためにint型私= 0 ; iがN <; I ++の場合(D [i]が.group)最良[L ++] = D [i]は.ID。
        他に     最高の[R - ] = D [i]の.ID。
    LL和 = 0、ANS = 0 以下のためにint型 i = 0 ; iがn <; iは++ 
    { 
        合計 + = [ベスト[I]]。
        ANS = MAX(ANS、和)+  B [ベスト[I]]。
    } 
    COUT << ANS << ENDL。
//     ため(= 0 Iにint型、iがn <; iは++)
 //         のprintf( "%dの"、最良[I] +1)。
//     printfの( "\ n")を。
    リターン 0 ; 
}

https://blog.csdn.net/qq_39382769/article/details/81396518

 

おすすめ

転載: www.cnblogs.com/Aiahtwo/p/11351377.html