私は、題し
第二に、分析
動的なプログラミングの問題入門。
状態遷移方程式$$ DP [I] [j]は[I] [J] + MAX(DP [I-1] [j]は、DP [I] [j]を)= $$
三、ACコード
1の#include <cstdioを> 2の#include <CStringの> 3の#include <iostreamの> 4の#include <アルゴリズム> 5の#include <ベクトル> 6の#include <cmath> 7 8 使用して 名前空間STDを、 9 の#defineっ長い長い 10 の#define MIN(A、B)((A)>(B)?(B):( A)) 11 の#define MAX(A、B)((A)>(B)? (A):( B)) 12 CONST INT MAXN = 100 。 13 INT A [MAXN + 13 ] [MAXN + 13 ]。 14 INTANS [ 2 ] [MAXN + 13 ]。 15 16 のint main()の 17 { 18 INT N。 19 一方(scanf関数(" %のD "、&N)=!EOF){ 20 のmemset(A、0、はsizeof (A))。 21 のmemset(ANS、0、はsizeof (ANS))。 22 のためには、(int型 I = 1 ; = iが<Nを; iは++ ){ 23 のための(int型 J = 1 ; J <= I; J ++){ 24 のscanf(" %dの"、&A [i]は[J])。 25 } 26 } 27 のための(int型 i = 1 ; iが= Nを<; Iは++ ){ 28 のために(INT J = 1 ; J <= I; J ++ ){ 29 アンス[I&1 ] [j]は= [I] [J] +マックス(ANS [(I- 1)・1 ] [J- 1 ]、回答[(I- 1)・1 ] [J])。 30 } 31 } 32 INT ANS = 0 。 33 のために(int型 i = 1 ; iが= Nを<; Iは++ ){ 34の ANS = MAX(ANS、アンス[N - 1 ] [I])。 35 } 36 のprintf(" %Dを\ n " 、ANS)。 37 } 38 リターン 0 。 39 }