彗星OJ - コンテスト#11 BのバックパックのDP

コード: 

#include <ビット/ STDC ++ H> 
の#define N 1005    
の#define M 2000 
の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN)    
名前空間stdを使用。     
INT A [N]、B [N]、W [M + 3]、F [M + 3]。        
INTメイン()
{ 
    // setIO( "入力")。   
    N INT、M、K、I、J、ANS = 0。    
    scanf関数( "%D%D%D"、&N、&M、およびK);     
    用(i = 0; iは= K <; ++ I)のscanf( "%d個"、&W [I])。       
    scanf関数( "%D%dの"、&A [i]は、&​​B [i])と(; I <= M + I I = 1)のために、      
    memsetの(F、-1、はsizeof(F))。          
    F [0] = 0;      
    <;(I ++ = n iはi = 1)のために
    { 
        (J = Mのためあり、j> = 0。
        --j) {    
            IF(F [J] == - 1)続けます。     
            (INT TMP = 1; TMP <= M; ++ TMP)のために
            {
                IF(J> = A [TMP])              
                    F [JA [TMP] = MAX(F [JA [TMP]、F [J] + B [TMP])。     
            } 
        }   
        もし(!I = N)
        { 
            ため(J = M; J> = 0; - J)
            { 
                IF(F [J] == - 1)続けます。      
                F [W jは+ [J] = MAX(F [W jは+ [J]、F [J])。   
            }   
        } 
    } 
    (j = 0; J <= M; ++ j)のための
    { 
        場合([J] F == - 1)続けます。        
        ANS = MAX(ANS、F [J] + W [J] + J)。    
    } 
    のprintf( "%d個の\ n"、ANS)。
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11573868.html