羅川渓谷P1809問題解決策

フェイス質問

この質問は、DPの+貪欲良い質問です。

最初のソートを行うのは必須です。

その後、我々は状況を分割します:

1.残した人であれば、のは最低限の彼を迎えに戻って来てみましょう

二人が残っ2.場合は、のは、最小のために戻って来るように、残りの2人の男性(すなわち、2人の最大)過去に、バックので、少しの時間、過去2で最小

最大人が配達の最小、あるいは第2大とせるため、上記の二つの方法は、最適でなければなりません。

 

上記の式の意味は、DP変換されます。

1.F [I] = F [I-1] + [1] + [N]。

2.F [I] = F [I-2] + [1] + [I-1] + [2] + [2]。

 

また、国境に対処するために注意を払います。

<ビット/ STDC ++ H>の#include
 の#define INC(A、B、C)のための(iは= intを登録する; iは= bを<; I + = C)
 の#define 100010 INI
 INT [INI]、F [INI] ;
使用して 名前空間はstdを、
INT のmain()
{ 
    int型のn; cinを>> N; 
    INC(1、nは、1)のscanf(" %dの"、および[I])。
    ソート( + 1、A + 1個の + N)。
    fは、[ 1 ] = [ 1 ]。
    fは[ 2 ] = [ 2 ]。
    INC(3、N、1 ){ 
        F [I] =分(F [I- 1 ] + [ 1 ] + [I]、F [I- 2 ] + 2 * [ 2 ] + [i]は+ [ 1 ] ); 
    } 
    COUT << F [N]。
}

 

おすすめ

転載: www.cnblogs.com/kamimxr/p/11563445.html