超高層ビルでのロス・バレーの牛牛における[3052]超高層ビル

タイトル説明

ベッシーや友人についてはほとんど知られた事実は、彼らが階段登りレースを愛していることです。よく知られている事実は、牛が実際に階段を下りて行く好きではないということです。だから、牛は自分の好きな超高層ビルの頂上にレースが終わった後、彼らは問題を抱えていました。階段を使って下りバック登ることを拒否し、牛がバックグラウンドフロアに到達するためにエレベーターを使用するように強制されています。

エレベータiがC_I(1 <= C_I <= W)ポンドの重さWの最大重量容量(1 <= W <= 100,000,000)ポンド牛を有しています。ベッシーはエレベーターに乗るの最小数を使用して地上階に牛のすべてのN(1 <= N <= 18)を取得する方法を見つけ出す助けてください。各エレベータに乗って牛の重みの合計はWよりも大きくてはなりません

今のグループに入れられるn個のアイテム、[i]はWボリュームを与え、各グループは、<= W、Q最小パケットの総容積を必要とします。(N <= 18)

入力形式

* 1行目:NとWのスペースで区切られています。

* 2..1 + Nライン:ラインI + 1は、乳牛の1の重さを与え、整数C_Iが含まれています。

出力フォーマット

必要に応じて、エレベータ乗りの最小数を示す*単一の整数、R、。

Rの一つは、エレベーターを下にトリップします。

サンプル入力と出力

入力#1
4 10 
5 
6 
3 
7
出力#1
3 

説明/ヒント

5、6、3、および7ポンドの重量を量る4頭の牛があります。エレベーターは10ポンドの最大重量容量を有します。

私たちは、他の牛と同じエレベーターに計量牛3を置くことができますが、他の3頭の牛を組み合わせることにはあまりにも重いです。上記溶液のために、エレベータ乗り1は、牛の#1、#3、エレベータ乗り2牛#2、及びエレベータ乗り3を含む牛#4を含むことを含みます。他のいくつかのソリューションは、この入力可能です。

 

溶液:圧縮された状態DP、G [I]は[i]は少なくとも使用される「バッグ」の状態を示しfはiがよ、番号iは状態空間ダウンによって表されます。

書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <キュー> 
の#include <cmath> 
の#include <CStringの> 
の#include <cstdlib> 
書式#include <cstdioを>
 使用して 名前空間はstd;
CONSTの INT N = 20 CONSTの 整数 M = 1 << 18 + 5 const  int型 OO = 0x3f3f3f3f INTのN、M、[N]、F [M]、G [M]。
INT メイン(){ 
    scanf関数(" %d個の%のD "、&​​N、&M)。
    INT OP =(1個の << N)。
    以下のためにint型私= 1 ; iが<= N; iが++ 
        のscanf(" %dの"、および[I])。
    memsetの(F、0x3fをはsizeof (F))。
    F [ 0 ] = 1 ; G [ 0 ] = M。
    int型 iは= 0 ; I <OP iが++ ){
         ためINT J = 1 ; J <= nであり、j ++ ){
             場合((1 <<(J- 1))&I)続行 ; // オブジェクトから選択された
            IF(G [I]> A = [J] && F [I |(1 <<(J- 1))]> = F [I]){ // オブジェクトが中に配置することができる   
               F | [I(1 <<(J- 1。 =))] F [I]は、
               G [I |(1 <<(J- 1))] = MAX(G [I |(1 <<(J- 1)]、G [I] - [J]); 
            } 
            そう IF(G [I] <[J] && F [I |(1 <<(J- 1)) ]>Fは= [I] + 1。){ // パッケージが収まらない 
               Fを[I |(1。 <<(J-1))] i]が+のF [= 1 
               G [I |(1 <<(J- 1))] = MAX(G [I |(1 <<(J- 1))]、M [J])。            
            } 
        } 
    }     
    のprintf(" %dの" F、[(1個の << N) - 1 ])。 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wuhu-JJJ/p/11325406.html