[タイトル]ソフトウェア・ソリューション

効果の対象に

        同時に2つのソフトウェアを開発すると同時に、ユーザに配信されるようにソフトウェア開発会社は、会社が今、できるだけ早くこのタスクを完了するために、それぞれがにより、ソフトウェアモジュールの$ m個の$($ 1 \当量のm個の\当量100 $)に分け同社の$ N $の技術的な人事部門は、($ 1 \当量のn \の当量100 $)を完了しています。

        同じソフトウェアのそれぞれを完了するために、当該技術分野で使用される日数の異なるモジュール最初の個人的な芸術のソフトウェアの$ I $完了、同じであり、知られているが、ソフトウェア・モジュールの完成異なる時間が異なります時間は、モジュールがモジュール$ d1のある時間[i]は、第2のソフトウェアを完了するために$は、$ D2 [i]は$です。

        各技術者は唯一のモジュールは一人だけで完成することができ、一緒に独立した人々によって行うことができない、同時にモジュールを行うことができます。開発期間を通じてモジュールの芸術が完了した後、その後の任意のモジュールの任意のソフトウェアを行うことができます。ソフトウェア会社がどのような時にお届けすることができたかを決定するためのプログラムを書きます。

 

問題の解決策

        我々は$のケースでのソフトウェアモジュールの第2の数の完了までの最初の$ I・ソフトウェア・モジュールを完了するには、[i]は$ $のDPを設定し、我々はMID $ $完了時間を二分でき、までのすべての技術であります$半ば$時間で、それが$ D2値の$に有料で$ D1 $へのテンプレートのバックパックです。

#include <iostreamの> 
する#include <CStringの> 
する#include <アルゴリズム> の#define MAX_N(100 + 5)
 の#define MAX_M(100 + 5)を使用して名前空間STDを、構造体ノード
{ int型D1、D2。
}。INTのN、M。
【MAX_N]ノード。int型DP [MAX_M]。
int型ANS; INT メイン()
{ 
    CIN >> N >> M。
    (登録をint i = 1 ; iが<= N ++ I)
    { 
        CIN >> [I] .D1 >> [I] .d2。



 


    




 
    }
    INT LT = 1、RT = 20000 、ミッド。
    一方(LT <= RT)
    { 
        ミッド = LT + RT >> 1 
        memsetの(DP、 - 1はsizeof DP)。
        DP [ 0 ] = 0 ;
        ため(登録をint i = 1 ; iが<= N; ++ I)
        { 
            ため(登録INT J = M; J> = 0 ; - J)
            { 
                ためのレジスタ(int型 kは= 0K <= J && K * [i]は.D1 <=ミッド; ++ K)
                { 
                    場合(〜DP [J - K])DP [J] = MAX(DP [J]、DP [J - K] - [I] .D1 * K(ミッド+)/ [I ] .d2)。
                } 
            } 
        } 
        もし(DP [M]> = M)
        { 
            ANS = ミッド。
            RT =半ば- 1 
        } 
         LT =ミッド+ 1 
    } 
    COUT << ANS。
    リターン 0 ; 
}
リファレンスプログラム

 

おすすめ

転載: www.cnblogs.com/kcn999/p/11275622.html