UVA-607-DP

https://vjudge.net/problem/UVA-607  

質問の意味:あなたが教授されている、あなたの話題Nを与え、各トピックはについて話していたが、また、話す、長いLとして各レッスンを踊ることはできません、Tuotang許可されますが、議論のための残り時間があるかもしれません、

しかし、あまり時間が残っている、または他の生徒たちは幸せではありません。次のように不幸式です。

 

 tは残り時間であり、Cは不幸度です。、当然の合計数は、最小をとる完成tpoic Nを検索し、最小度合いの学生は、満足していません。

1:貪欲得ることができるコースの総数の最小値を過ごします。

2:学生不幸度の最小値。

DP [i]は不幸な最低限度の前に、i番目のトピックを示して設定してください。

次いで、[I] =分(DP [J-1] +コスト(トピック[J] + ... +トピック[I]))(トピック[J] + ... +トピックをDP [I])<= L

:COUT; 使用して

    std ::てendl;
    使用してのstd :: cinをします。
    使用してのstd ::マップを。
    使用してのstd ::ベクトルを、
    使用してのstd :: 文字列を使用してのstd ::並べ替えを。
    使用してのstd :: PRIORITY_QUEUEを。
    使用してのstd ::大きいを。
    使用してのstd ::ベクトルを、
    使用してのstd ::スワップを。
    使用してのstd ::を積み重ねます。
    使用してのstd ::ビットセットを。
    使用してのstd ::にstringstreamを。



    constexprののint型の N = 1005 ; 



    int型のn; 

    int型の話題[N];
    INT LEC [N]。
    INT DP [N]。
    int型のL、C。

    INTのコスト(int型 L、int型 C、int型の合計)
    { 
        int型   、T = L - 和。
        もし(Tの== 0 
        { 
            戻り 0 
        } 
        そう であれば1 <= T && T <= 10 
        { 
            リターン - C。
        } 
        戻り(T - 10)*(T - 10 ); 
    } 


    ボイド解く()
    { 
        int型T = 0 一方、(CIN >> N)
        { 
            場合(N == 0 
            { 
                破ります
            } 
            CIN >> L >> C。
            以下のためにint型 i = 1 ; iが<= N; iは++ 
            { 
                CIN >> トピック[I]。
            } 
            LEC [ 0 ] = 0 
            DP [ 0 ] = 0 ;
            以下のためのint型I = 1 ; I <= N; I ++は
            { 
                LEC [I] = LEC [I - 1。 ] + 1 ; 
                DP [I] = DP [I - 1 ] + コスト(L、C、トピック[I])。
                 INT SUM = トピック[I]、
                 のためのint型 J = I - 1。 ; J> = 0 ; J、 
                { 
                    int型ヴァルDP = [J] + コスト(L、C、SUM);
                     // の最小と貪欲もちろん
                    IF(LEC [I]> LEC [J] + 。1 
                    {
                        LEC [I] = LEC [J] + 1 ; 
                        DP [I] = ヴァル; 
                    } 
                    // DP、コースの同じ数、不幸の最小次数
                     IF(LEC [I] == LEC [J] + 1。 && DP [I]> ヴァル)
                    { 
                        DP [I] = ヴァル; 
                    } 
                    SUM = SUM + トピック[J];
                     IF(SUM> L)
                         BREAK ; 
                } 
            } 
            IF!(T = 0 
            { 
                COUT << ENDL。
            }
             ++ T。
            裁判所未満 << " ケース" <<トン<< " " << てendl; 
            COUT << " 講義の最小数:" << LEC [N] << ENDL。
            裁判所未満 << " トータル不満インデックス:" << DP [n]は<< てendl; 
        } 

    } 

}。



D://1.text " " R 、STDIN);
 #endifの // !ONLINE_JUDGEの
    ccは::解く(); 

    を返す 0 ; 
}

 入力:

6 
30  15 
10 
10 
10 
10 
10 
10 

10 
120  10 
80 
80 
10 
50 
30 
20 
40 
30 
120 
100 
0

出力:

ケース1 
講義の最小数:2 
総不満インデックス:0 

ケース2 講義の最小数:6 総不満インデックス:2700

 

おすすめ

転載: www.cnblogs.com/shuiyonglewodezzzzz/p/11531181.html