Question:
Thoughts:
Use a matrix s to store N * n boards, and use ans to store intermediate processes
(1) initialization: ANS [I] [J] = s [I] [J] (I = N)
(2) recursion: ANS [I] [J] = max (s [I + 1] [J-1], s [I + 1] [J], s [I + 1] [J + 1]) + s [I] [J] (1 <= I <n)
(3) Result: Answer = max (s [I] [J]) (I = 1)
Code:
# Include <iostream> using namespace STD; # define N 10 // int map [n + 2] [n + 2]; int max (int, int B, int c) {If (A> B) return a> C? A: C; elsereturn B> C? B: C;} int main () {int I, j, N; while (CIN> N ){Memset (MAP, 0, sizeof (MAP); // generates random test data for (I = 1; I <= N; I ++) {for (j = 1; j <= N; j ++) {// CIN> map [I] [J]; Map [I] [J] = rand () % 10-5; cout <map [I] [J] <'';} cout <Endl;} int max =-0x7fffffff; // merge array S and array ans into array map // ans [I] [J] = s [I] [J] (I = n) for (I = n-1; i> = 1; I --) {for (j = 1; j <= N; j ++) {// ans [I] [J] = max (s [I + 1] [J-1], s [I + 1] [J], s [I + 1] [J + 1]) + s [I] [J] (1 <= I <n) map [I] [J] = map [I] [J] + max (Map [I + 1] [J-1], map [I + 1] [J], map [I + 1] [J + 1]); // Answer = max (s [I] [J]) (I = 1) if (I = 1 & map [I] [J]> MAX) max = map [I] [J] ;}} cout <max <Endl ;} return 0 ;}