题意
链接: link.
地上有两排糖果,妹妹和哥哥分别从左上角爬到右下角,所过之处,糖果皆无,妹妹担心哥哥吃多糖对牙齿不好,哥哥贪吃,想要获得最多糖果,妹妹先从左上角爬到右下角,然后哥哥再爬取,最终的结果是哥哥获得的糖果数,妹妹想要结果最小,哥哥想要结果最大。
爬的时候只能向下或者向右
思路
只有两排,那么妹妹向下爬的机会只有一次,这两排有多少列就有多少个拐点,而妹妹爬完了之后哥哥再爬就无济于事,哥哥只能获得以拐点分界的第一排的后段和第二排的前段,前缀贪心即可,还不明白,见代码
AC代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1E5 + 10;
ll arr[N];
ll brr[N];
ll now, res1, res2;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> now;
arr[i] = arr[i - 1] + now;
}
for (int i = 1; i <= n; i++)
{
cin >> now;
brr[i] = brr[i - 1] + now;
}
ll ans = LLONG_MAX;
for (int i = 1; i <= n; i++)
{
res1 = arr[n] - arr[i];
res2 = brr[i - 1];
ans = min(ans, max(res1, res2));
}
cout << ans << endl;
}
//system("pause");
return 0;
}