バイナリの最適化
#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <cstdlib> の#include <cmath> 使用して 名前空間をSTD。 const int型 MAXN = 25000 ; const int型 MAXM = 2005 ; INT DP [MAXN]、VVは、S [MAXM]、V1 [MAXM]、W1 [MAXM]。 int型V2 [MAXN]、W2 [MAXN]。 int型CNT、N。 INT メイン() { CIN >> N >> VV。 以下のために(INT iが= 1 ; I <= N; I ++ ) CIN>> V1 [i]は>> W1 [I] >> S [i]は、 以下のために(INT iが= 1 ; I <= N; I ++ ) { ため(INT J = 1 ; J <= S [i]は、J << = 1 ) { V2 [ ++ CNT] = J * V1 [i]が; W2 [CNT] = J * W1 [i]は、 S [i]は - = J。 } もし、(S [I]) { V2 [ ++ CNT] = S [I] * V1 [i]は、 W2 [CNT] = S [I] * W1 [i]は、 } } 以下のために(int型私は= 1 ; I <= CNT; I ++ ) のための(INT J = VV; J> = V2 [I]; j-- ) DP [J] = MAX(DP [J]、DP [J-V2 [I] + W2 [I])。 COUT << DP [VV]。 リターン 0 ; }