标签:tun 影响 sequence ble paint nta print nal marked
Monocarp had a sequence a consisting of n+m integers a1,a2,…,an+m. He painted the elements into two colors, red and blue; n elements were painted red, all other m elements were painted blue.
After painting the elements, he has written two sequences r1,r2,…,rn and b1,b2,…,bm. The sequence r consisted of all red elements of a in the order they appeared in a; similarly, the sequence b consisted of all blue elements of a in the order they appeared in a as well.
Unfortunately, the original sequence was lost, and Monocarp only has the sequences r and b. He wants to restore the original sequence. In case there are multiple ways to restore it, he wants to choose a way to restore that maximizes the value of f(a)=max(0,a1,(a1+a2),(a1+a2+a3),…,(a1+a2+a3+?+an+m))
Help Monocarp to calculate the maximum possible value of f(a).
Input
The first line contains one integer t (1≤t≤1000) — the number of test cases. Then the test cases follow. Each test case consists of four lines.
The first line of each test case contains one integer n (1≤n≤100).
The second line contains n integers r1,r2,…,rn (?100≤ri≤100).
The third line contains one integer m (1≤m≤100).
The fourth line contains m integers b1,b2,…,bm (?100≤bi≤100).
Output
For each test case, print one integer — the maximum possible value of f(a).
Example
input
4
4
6 -5 7 -3
3
2 3 -4
2
1 1
4
10 -3 2 2
5
-1 -2 -3 -4 -5
5
-1 -2 -3 -4 -5
1
0
1
0
output
13
13
0
0
Note
In the explanations for the sample test cases, red elements are marked as bold.
In the first test case, one of the possible sequences a is [6,2,?5,3,7,?3,?4].
In the second test case, one of the possible sequences a is [10,1,?3,1,2,2].
In the third test case, one of the possible sequences a is [?1,?1,?2,?3,?2,?4,?5,?3,?4,?5].
In the fourth test case, one of the possible sequences a is [0,0].
题意:给出两个序列r, b, 将r、b两个序列的数按照原有的序列可进行两两组合或者不进行组合相加,直到r, b两个序列的数全部用完,求出其最大值max(0, ans).
解析:因为该题有负数,可能最大值也是负数,但是这道题给的公式已经规定求得答案最小的情况只能是0。此外,两个序列的顺序互不影响,所以只需找到两者前缀和sumA, sumB的最大值后相加即可(假若题目给的公式没有0在其中,那么最后答案会是max(sumA, max(sumB + sumA, sumB)), 时间复杂度可达到O(t * (n + m)).
代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 105;
int n, m, t;
int a[N], b[N];
int main()
{
cin >> t;
while(t --)
{
int sumA = 0, sumB = 0;
memset(a, 0, sizeof a);
memset(b, 0, sizeof b);
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
a[i] += a[i-1];
sumA = max(sumA, a[i]);
}
cin >> m;
for(int i = 1; i <= m; i++)
{
cin >> b[i];
b[i] += b[i-1];
sumB = max(sumB, b[i]);
}
cout << sumA + sumB << endl;
}
return 0;
}
Educational Codeforces Round 101 (Rated for Div. 2) B. Red and Blue
标签:tun 影响 sequence ble paint nta print nal marked
原文地址:https://www.cnblogs.com/K2MnO4/p/14301118.html