2. 01ナップザック問題をAcWing

 

シンプル

// 朴素二维 
する#include <iostreamの> 
の#include <アルゴリズム>
 使用して 名前空間をSTD。
const  int型 N = 1010 ;
整数N、M。
INT V [N]、W [N]。
INT F [N]、[N]。
INT メイン(){ 
    CIN >> N >> M。
    以下のためにINT iが= 1 ; I <= N; I ++ 
        CIN >> V [I] >> W [i]は、
    以下のためにINT iが= 1 ; I <= N; I ++)// 装的个数
        ためINT= J 0、J <= M; J ++){ // 最大容量 
         // 言うのF [I] [J] Fに分割されている[I-1]、[J ]( i番目の除去)及びf [I-1] [JV [I] + W [i]は( i番目の除去最初、彼の品質を減じ、プラス) 
            F [I] [J] = F [I- 1 ] [J]; // // // <J V [i]は、不在は、考えられなかったであろう
            場合は(= V [I] F [I] [J] = MAX(F [I] [J]、F J)> [I- 1 ] [JV [I] + W [I]); 
        } 
    COUT << F [N-] [M] << ENDL;
     戻り 0 ; 
}

 

最適化

// 次元最適化 
する#include <iostreamの> 
する#include <アルゴリズム>
 使用して 名前空間STD;
 constの 整数 N = 1010 ;
 INT N-、M;
 INT V [N]、W [N];
 int型F [N];
 int型メイン( ){ 
    CIN >> N-Mであり; // mは時間を表し、n-表す数値
    のためのINT I = 1 ; I <= N; I ++)CIN >> V [I] >> Wを[I];
     のためINT I = 1 ; I <= N; I ++ のためのINT J = M; J> = V [I]は、J -
            F [J] = MAX(F [J]、F [J - V [I] + W [I])。
    COUT << F [M]。
    リターン 0 ; 
}

 

 

おすすめ

転載: www.cnblogs.com/QingyuYYYYY/p/11873168.html