ララ物資の秋のトリック:DPセントの問題

問題:
1分、2分、5分、10分コイン4種類、各所与セントのコイン無制限の数N(N <= 100000)、番号と組み合わせてNセントを構成することができますか?

URL:https://www.nowcoder.com/question/next?pid=18874168&qid=587672&tid=29129649

  Huawei社は、DPが第一、V [i]は硬貨の金種を格納する、[N-所望0-nから記憶された硬貨の最小数を定義する単純なDPと同様な質問、問題起因タイトルからの平面図であり、初期DP [0]は0、状態遷移方程式由来DPを= [I] =分{DP [I-1] + 1、DP [IV [J] +1}。

 状態方程式を理解することができるため、N所与セント、私は通貨を使用するように設定されている数は、通貨単位が最後のKで、クレジットの完全な使用を想定kは、その後、kは、その後、数N / Kであります式があります。

      DPは、[I]は、[N] = DP [I-1]〜[N-0 * K] + DP [I-1]〜[N-1 * K] + DP [I-1] [N-2 * K] + ....... + DP [I-1] [NN / K * K]、 すなわち、すべての場合は、 - k個のクレジットを使用しない場合、クレジット・K、2を用いてk個のクレジットの使用.......全てのkクレジットと、状態遷移方程式は、2桁のグループの形で得ることができます。

  DPは一次元の方程式を簡略化:DP [I] DP = [I] + DP [IV [J]

コード:

インポートjava.util.Scanner; 

パブリック クラスメイン{
     公共 静的 ボイドメイン(文字列引数は、[]){ 
    スキャナ入力 = 新しいスキャナ(System.in)。
    INT、N = input.nextInt()。
    INTコイン[] = {1,2,5,10 }。
    INT [] DP = 新しい int型 [100001 ]。
    DP [ 0] = 1 ;
    以下のためにint型、iは4 <; I = 0 iは++ ){
         ためint型 J =コイン[I]; J <= nであり、j ++ ){ 
            DP [J]=(DP [J] + DP [J-コイン[I])%十億七
        } 
    } 
    のSystem.out.println(DP [N])。
    
    } 
}

 

理解することができる:それぞれのためのお金の総額を形成することができ、誘導された二次元配列の開始前と同じようにすることができ、1枚のコインの利用、1枚のコイン2、2枚の1コイン、通貨... 3 3 ....ので、反復を停止し、お金がjが増加しており、マイナス式が一定の繰り返し、マイナスの下にコインの数は絶えず増加しています

最初の硬貨、クレジット2を減算する方法...得られた反復数を停止し、必要な結果を得ることができます。

     タイムコードの複雑さは、O(N)、暴力的溶液法よりもはるかに小さくなっています。

DP [J] =(DP [J] + DP [J-コイン[I])%十億七


 

 

おすすめ

転載: www.cnblogs.com/lszz/p/11802247.html