题解: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;
}
}
|