AtCoder Regular Contest 090: C - Candies

,

https://beta.atcoder.jp/contests/arc090/tasks/arc090_a

solution

DP。組合せ${}_nC_r$を求めるときの雰囲気でやる。$O(N^2)$。

最長経路問題に落としてDAGなのでBellman-Ford法でもできるなあとは思ったが$O(N^3)$なので無駄。

implementation

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; (i) < int(n); ++ (i))
#define ALL(x) begin(x), end(x)
using namespace std;
template <class T> inline void chmax(T & a, T const & b) { a = max(a, b); }

int main() {
    // input
    int n; cin >> n;
    vector<int> a0(n); REP (i, n) cin >> a0[i];
    vector<int> a1(n); REP (i, n) cin >> a1[i];
    // solve
    vector<int> acc0(n + 1); partial_sum(ALL(a0), acc0.begin() + 1);
    vector<int> acc1(n + 1); partial_sum(ALL(a1), acc1.begin() + 1);
    int result = 0;
    REP (i, n) {
        chmax(result, (acc0[i + 1] - acc0[0]) + (acc1[n] - acc1[i]));
    }
    // output
    cout << result << endl;
    return 0;
}