int main(void) { int T, ncase, n, i, j; scanf("%d", &T); ncase = 1; while (T-- > 0) { scanf("%d%d", &M, &N); for (i = 0; i < M; i++) for (j = 0; j < N; j++) { scanf("%d", &n); uranium[i][j] = n + prev_col(uranium, i, j); } for (i = 0; i < M; i++) for (j = 0; j < N; j++) { scanf("%d", &n); radium[i][j] = n + prev_row(radium, i, j); } printf("Case %d: %d\n", ncase++, solve()); } return 0; }
// Start a row. If a=-1, it is the first row // If a>0 it is a dimension to put between rows. void Parser::start_a_row(int a) { Xid prev_row(2); // dummy id as default value { Xmlp V = the_stack.top_stack()->last_addr(); if(V) prev_row = V->get_id(); } bool initial_hline=false; if(a>0) prev_row.add_attribute(the_names[np_spaceafter],Istring(a)); for(;;) { remove_initial_space_and_back_input(); symcodes S = cur_cmd_chr.get_cmd(); if(S==hline_cmd) { get_token(); if(cur_cmd_chr.get_chr()==zero_code) { if(a<0) initial_hline=true; else prev_row.add_attribute(np_bottomborder,np_true); continue; } else { T_cline(); continue; } } if(S==end_cmd) return; the_stack.push1(np_row); if(initial_hline) the_stack.cur_xid().add_attribute(np_topborder,np_true); start_a_cell(false); return; } }
bool simple_ctable::iter::retreat(bool initial) { for(;;) { if(!prev_row(initial)) break; if(prev_column(true)) return true; if(!initial && !source->prev()) break; } /* need to go back forward to where we were */ advance(); return false; }
int solve(void) { int dp[500][500]; int i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { dp[i][j] = MAX( radium[i][j] + prev_col(dp, i, j), uranium[i][j] + prev_row(dp, i, j)); } } return dp[M-1][N-1]; }