codeforces 1555 C. Coin Rows (暴力+前缀和)

题目

思路:主要注意看一个条件只有两行,且只能向右或向下走,那Alice只有N种移动情况,从第一列就开始下移再往右,先右行至第二列再下移往右,先行至第三列再下移…
而对于每种情况Bob实际上只会从两种情况选一种最大的,一种是只取第一行中Alice没走过的,一种是第二行中Alice没走过的,看下面例子


Alice是蓝色线,Bob贪心之下选的是Max(6,5+2)=7。最后的答案只要把Alice的所有情况都遍历一遍,取所有情况的最小即可(注意用前缀和优化),细节看代码。

#include<iostream>
#include<math.h>

using namespace std;
typedef long long ll;

const int Max = 1e6 + 5;
ll a[Max], b[Max];

int main()
{
   
	int t;cin >> t;
	while (t--)
	{
   
		int n;cin >> n;

		for (int i = 1;i <= n;i++)
		{
   
			cin >> a[i];
			a[i]+= a[i - 1];
		}
		for (int i = 1;i <= n;i++)
		{
   
			cin >> b[i];
			b[i] += b[i - 1];
		}

		ll mi = 1e16+5;
		for (int i = 1;i <= n;i++)
		{
   
			mi = min(mi, max(a[n] - a[i], b[i - 1]));
		}

		cout << mi << endl;
	}
}
全部评论

相关推荐

QwQqvq:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
2024-11-20 00:10
华东交通大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务