可以知道爱丽丝的路径是拐两次弯的折线
那么我们知道鲍勃能够选择的位置只有两段黄线中的一段
所以可以求出来第二行的后缀和,然后求出来第一行的前缀行,这样鲍勃在爱丽丝分割之后的情况下就会选择这两者中最大的一段,然而爱丽丝也会阻碍鲍勃得到分数,那么就需要在所有取这两段中最大值的所有情况中取最小值。
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 10;int g[3][M];void solve(){int m;cin >> m;for(int i = 1;i <= 2;i++){for(int j = 1;j <= m;j++)cin >> g[i][j];}vector<int>s_up(m+5,0);vector<int>s_down(m+5,0);for(int i = 1;i <= m;i++)s_down[i] = g[2][i] + s_down[i-1];s_up[m] = g[1][m];for(int i = m-1;i >= 1;i--)s_up[i] = g[1][i] + s_up[i+1];int res = 2e9;for(int i = 1;i <= m;i++){res = min(res,max(s_down[i-1],s_up[i+1]));}cout << (res == 2e9 ? 0 : res) << endl;
}int main(){int T;cin >> T;while(T--){solve();}return 0;
}