クラス解決{ パブリック: INT getMoneyAmount(INT N){ ベクトル <ベクトル< INT >> DP(N + 1、ベクトル< INT >(N + 1 ))。 以下のために(int型 i = 1 ; iが<= N; iは++ ){ DP [i]は[I] = 0 ; もし(!I = N){ DP [I] [I + 1 ] = I。 } } のための(int型 K = 3; kは<= N; ++ k個){ ため(int型 I = 1 ; I <= N-K + 1 ; iは++ ){ int型ミネソタ州=(1 << 30) - 1 。 用(int型 J = iは+ 1、J <iは+ K - 1、J ++ ){ int型 TMP = J + MAX(DP [I]、[J - 1 ]、DP [J + 1 ] [I + K - 1 ] ); もし(TMP <ミネソタ州)ミネソタ州= TMP。 } DP [i]は[I+ K - 1 ] = ミネソタ。 } } 戻り DP [ 1 ] [N]; } }。