より多くのチーム01-バックパックP2663

P2663より多くのチーム

問題の解決策

この問題は、水またはデータです。(私はデータは、ああ、人々の数の半分を超えていない方法を知っています)

F [I] [J]の項目は、スコアjの最大スコアを超えていない私の前に

 

J・レコード・スコア。

 

そして、バックパック解決寸法をドロップ01

 

 

コード

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <cstdlib> 
書式#include <cmath> 
の#include <アルゴリズム> 
書式#include < 文字列 > 
の#include <CStringの> 
の#include <キュー> 使用して名前空間はstdを、
typedefの長い長いLL。
インラインint型リード()
{ int型 ANS = 0 チャー最後=を' '、CH = GETCHAR()。
    しばらく(CH < ' 0 ' || CH>

 
 

     9 ')最後= CH、CH = GETCHAR()。
    一方、(CH> = ' 0 ' && CH <= ' 9 ')ANS = ANS * 10 + CH- ' 0 '、CH = GETCHAR()。
    もし(最後== ' - ')ANS = - ANS;
    戻り値は、ANS; 
} 

INT N;
INT S [ 105 ]。
int型の F [ 5005 ]。
int型 AVE = 0、ANS = 0 ; 

int型のmain()
{ 
    Nを= )(読み取ります。
    以下のためにINT iが= 1 ; I <= N; I ++)S [I] =(読み取り)、AVE + = S [i]は、
    AVE = AVE / 2 以下のためにINT iが= 1 ; I <= N; I ++ のためのINT J = AVE; J> = S [I]; j-- ){ 
               fは[j]は MAX(F [J]、F [JSを[= I] + S [I]); 
           ANS = MAX(ANS、F [J])。
       } 
    のprintf(" %dの\ n " 、ANS)。
    
    リターン  0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xiaoyezi-wink/p/11959216.html