問題の意味:ダウンまたは右(n、m)は(1,1)から徒歩、B、または上右から(N、1)、(1、M)にA及びB行くの出力を行きますポイント上の重みと、AとBは交点を持たなければならない、交差点は総重量、A及びBに含まれていないパスに移動され、交差点以外は省略する
ソリューション:再帰DP
DP1 [i] [j]は(I、J)から(1,1)から最大の優先順位値を示しており、用DP2 [I]、[J](nは、1)(i、j)とに、DP3 [I] [J](1、M)(i、j)は、DP4 [I]、[J](N、M)の(I、J)には、オフラインで得るために計算されます。
被験者が所定の条件を容易境界に位置する交差点を知らないことができ、2例交差点に到達があります。
#include <iostreamの> する#include <memory.h> の#define N 1005 名前空間stdを使用。 INT [N] [N]、DP1 [N] [N]、DP2 [N] [N]、DP3 [N] [N]、DP4 [N] [N]。 INTのmain(){ int型N、M、ANS = 0。 CIN >> N >> M。 以下のために(INT i = 1; iが<= N; I ++) のための(INT K = 1; K <= M; ++ K) >> [I] [k]をCINと、 以下のために(INT i = 1; iが<= N; I ++) のための(INT K = 1; K <= M; ++ K) DP1 [I] [k]は=を[I] [K] + MAX(DP1 [I] [K-1]、DP1 [I-1] [K])。 以下のために(INT I = N; I> = 1; i--) のための(int型のk = 1; K <= M; ++ K) DP2は、[I]は、[k]は[I] [K] + MAX(DP2を[= I] [K-1]、DP2 [I + 1] [K])。 <;(= N iが++ iは1 = INT)のための ための(int型K = M、K = 1; k--)> DP3 [I] [k]は[I] [K] + MAX(DP3を[= i]は[K + 1]、DP3 [I-1] [K])。 (; I> = 1 i-- I = N INT)のために (int型のk = mに関する。 DP4 [I] [k]は[I] [K] + MAX(DP4 [I + 1] [k]は、DP4 [i]は[K + 1)=。 (; iがN <I ++はiは2 = INT)のための ための(int型、K = 2であり、m <kであり、k ++){ ANS = MAX(ANS、DP1 [i]が[K-1] + DP2 [I + 1] [ K] + DP3 [I-1] [K] + DP4 [i]の[K + 1])。 ANS = MAX(ANS、DP1 [I-1] [K] + DP2 [I] [K-1] + DP3 [i]の[K + 1] + DP4 [I + 1] [K])。 } COUT << ANS << ENDL。 0を返します。 }