1555C - Coin Rows

题解:https://codeforces.ticom/problemset/problem/1555/C

题意:给你一个2*m的地图,只能向右或者下走,由a开始先走并且拿走经过的路途中的全部硬币,然后由b开始走,b那的硬币代表分数,a想分数少,b想分数多,求最少的分数。

题解:

因为只有两行,所以只需要找到a向下的节点,每一次对第一行右边和第二行左边的硬币进行比较取最大的,因为遍历会超时,所以用ans1先对第一行的所有硬币记录,而后i每加1,都要减去a[i];ans2都加a[i-1];

//#include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long int ll;

int a[2][100005];
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int m;
		cin >> m;
		int ans1 = 0, ans2 = 0, ans;
		for (int i = 0; i < 2; i++)
		{
			for (int j = 0; j < m; j++)
			{
				cin >> a[i][j];
				if (i == 0)
				{
					ans1 += a[i][j];
				}
			}
		}

		int minans = 1e9;
		for (int i = 0; i < m; i++)
		{
			//	cout << i << " ";
			ans1 -= a[0][i];
			if (i > 0)
				ans2 += a[1][i - 1];
			ans = max(ans1, ans2);
			if (ans < minans)
			{
				minans = ans;
			}
		}
		cout << minans << endl;
	}

}

上一篇:ubunu设置java命令为全局的命令-添加到全局环境变量


下一篇:基础算法总结