可以知道爱丽丝的路径是拐两次弯的折线
那么我们知道鲍勃能够选择的位置只有两段黄线中的一段
所以可以求出来第二行的后缀和,然后求出来第一行的前缀行,这样鲍勃在爱丽丝分割之后的情况下就会选择这两者中最大的一段,然而爱丽丝也会阻碍鲍勃得到分数,那么就需要在所有取这两段中最大值的所有情况中取最小值。
#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;
}