「楽しい学習アルゴリズム」ダイナミックプログラミング

2019年11月30日

午前10時05分54秒

 

 

#include <ビット/ STDC ++ H.> 
の#include <STDLIB.H> 
する#include <stdio.hの>
 使用して 名前空間STDと、
 の#define MAXN 10005
 の#define M 105
 INT C [M] [MAXN];
 INT W [M] V [M];
 int型 X [M]は; // X [M]はカートのi番目の項目を追加するかどうかを表す
整数のmain(){
     intは、Jは、N-、Wは、I、
    COUTが << 一品を入力してください番号:" ; 
    cinを >> N-; 
    coutの << " ショッピングカートの容量を入力してください:" ; 
    cinを >> W; 
    coutの<< " 空白で区切られた重みwの値及びv各項目を入力してください" ;
     のためのINT I = 1 ; I <= N ++ {I)
        CIN >> W [I] >> V [I ]; 
    } 
    ため(私は= 0 ; I <= N ++ {I)
        C [I] [ 0 ] = 0 ; 
    } 
    ため(J = 0 ; J <= Wであり; ++ J){ 
        C [ 0 ] [J] = 0 ; 
    } 
    ため(私は= 1。 ; I <= N; ++ I){
         ためINT J = 1。 ; Jは<= Wであり; ++J){
             IF(J <W [I]){ // 記事はないに、カートの重量容量よりも大きい 
                C [I] [J] = C [I- 1 ] [J]; 
            } 
            そうでなければ{ 
                C [ I] [J] = MAX(C [I- 1 ] [J]、C [I- 1 ] [JW [I] + ; V [I])
            } 
        } 
    } 
    COUT << カートの最大荷重値:" << C [N-] << [Wである] ; ENDL
     // 構成される逆最適 
    J = Wである;
     のための(I = N-; I> 0 ; - I){
         IF(C [I] [ J]> C [I- 1 ] [J]){
            X [i]は = 1 ; 
            J - = W [i]は、
        } { 
            X [i]は = 0 ; 
        } 
    } 
    COUT << " 装入购物车的物品为:" << ENDL。
    以下のためにINT iが= 1 ; I <= N; ++ I){
         場合(X [I] == 1 ){ 
            COUT << I << "  " 
        } 
    } 
    システム(" 一時停止" )。
    リターン 0  ;
     
}

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/JasonPeng1/p/11961516.html