# 14256: 【原4256】Candies

### 题目描述

author: Guo Linsong 原OJ链接：https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4256

## Description

We have a $$2\times N$$ grid. We will denote the square at the i-th row and j-th column ($$1≤i≤2$$,$$1≤j≤N$$) as $$(i,j)$$.You are initially in the top-left square, $$(1,1)$$. You will travel to the bottom-right square, $$(2,N)$$, by repeatedly moving right or down.The square $$(i,j)$$ contains $$A_{i,j}$$ candies. You will collect all the candies you visit during the travel. The top-left and bottom-right squares also contain candies, and you will also collect them.At most how many candies can you collect when you choose the best way to travel?

## Input Format

Input is given from Standard Input in the following format:

$$N$$

$$A_{1,1}~A_{1,2}\ldots A_{1,N}$$

$$A_{2,1}~A_{2,2}\ldots A_{2,N}$$

## Output Format

Print the maximum number of candies that can be collected.

5

5 4 3 2 1

1 2 3 4 5

24

5

2 8 3 1 7

8 9 2 3 4

28

## ligongzzz's solution

#include <iostream>
#include <vector>
using namespace std;

int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

int n;
cin >> n;
vector<int> up(n + 1), down(n + 1), ups(n + 1, 0), downs(n + 1, 0);

for (int i = 1; i <= n; ++i) {
cin >> up[i];
ups[i] = ups[i - 1] + up[i];
}
for (int i = 1; i <= n; ++i)
cin >> down[i];

downs[n] = down[n];
for (int i = n - 1; i >= 1; --i)
downs[i] = downs[i + 1] + down[i];

int ans = 0;
for (int i = 1; i <= n; ++i) {
int cur_ans = ups[i] + downs[i];
ans = cur_ans > ans ? cur_ans : ans;
}

cout << ans;

return 0;
}