Red and Blue (Codeforces 1469B)
Tags: Greedy, dp

Monocarp had a sequence $$$a$$$ consisting of $$$n + m$$$ integers $$$a_1, a_2, \dots, a_{n + 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 $$$r_1, r_2, \dots, r_n$$$ and $$$b_1, b_2, \dots, b_m$$$. 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, a_1, (a_1 + a_2), (a_1 + a_2 + a_3), \dots, (a_1 + a_2 + a_3 + \dots + a_{n + m}))$$$$$$Help Monocarp to calculate the maximum possible value of $$$f(a)$$$.

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 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 \le n \le 100$$$).The second line contains $$$n$$$ integers $$$r_1, r_2, \dots, r_n$$$ ($$$-100 \le r_i \le 100$$$).The third line contains one integer $$$m$$$ ($$$1 \le m \le 100$$$).The fourth line contains $$$m$$$ integers $$$b_1, b_2, \dots, b_m$$$ ($$$-100 \le b_i \le 100$$$).

Output: For each test case, print one integer — the maximum possible value of $$$f(a)$$$.

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 $$$[\mathbf{6}, 2, \mathbf{-5}, 3, \mathbf{7}, \mathbf{-3}, -4]$$$.In the second test case, one of the possible sequences $$$a$$$ is $$$[10, \mathbf{1}, -3, \mathbf{1}, 2, 2]$$$.In the third test case, one of the possible sequences $$$a$$$ is $$$[\mathbf{-1}, -1, -2, -3, \mathbf{-2}, -4, -5, \mathbf{-3}, \mathbf{-4}, \mathbf{-5}]$$$.In the fourth test case, one of the possible sequences $$$a$$$ is $$$[0, \mathbf{0}]$$$.

Sample Inputs:
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

Sample Outputs:
13
13
0
0

Solution (Python):
def get_largest_substring_sum(size, number_list):
    (max_sum, curr_value) = (0, 0)
    for x in range(size):
        curr_value += number_list[x]
        if curr_value > max_sum:
            max_sum = curr_value
    return max_sum
t = int(input())
answer_list = []
while t > 0:
    n = int(input())
    r = [int(x) for x in input().split()]
    m = int(input())
    b = [int(x) for x in input().split()]
    answer = get_largest_substring_sum(n, r) + get_largest_substring_sum(m, b)
    answer_list.append(answer)
    t -= 1
for answer in answer_list:
    print(answer)

Solution (Python):
def mxsum(m):
    k = 0
    return max(max(((k := (k + i)) for i in m)), 0)
t = int(input())
for i in range(t):
    n = int(input())
    r = list(map(int, input().split()))
    m = int(input())
    b = list(map(int, input().split()))
    print(mxsum(r) + mxsum(b))

Solution (Python):
from math import inf

class Solution:

    def __init__(self):
        pass

    def solve(self):
        t = int(input())
        result = []
        for i in range(t):
            n = int(input())
            r = list(map(int, input().split()))
            m = int(input())
            b = list(map(int, input().split()))
            (sum1, sum2) = (0, 0)
            (max1, max2) = (-inf, -inf)
            for x in r:
                sum1 += x
                if max1 < sum1:
                    max1 = sum1
            for x in b:
                sum2 += x
                if max2 < sum2:
                    max2 = sum2
            if max1 < 0:
                max1 = 0
            if max2 < 0:
                max2 = 0
            result.append(max1 + max2)
        for x in result:
            print(x)
if __name__ == '__main__':
    sol = Solution()
    sol.solve()