time limit per test
2 seconds
memory limit per test
256 megabytes
Winter holidays are coming up. They are going to last for n days.
During the holidays, Monocarp wants to try all of these activities exactly once with his friends:
- go skiing;
- watch a movie in a cinema;
- play board games.
Monocarp knows that, on the i-th day, exactly ai friends will join him for skiing, bi friends will join him for a movie and ci friends will join him for board games.
Monocarp also knows that he can't try more than one activity in a single day.
Thus, he asks you to help him choose three distinct days x,y,z in such a way that the total number of friends to join him for the activities (ax+by+cz) is maximized.
Input
The first line contains a single integer t (1≤t≤104) — the number of testcases.
The first line of each testcase contains a single integer n (3≤n≤105) — the duration of the winter holidays in days.
The second line contains n integers a1,a2,…,an (1≤ai≤108) — the number of friends that will join Monocarp for skiing on the i-th day.
The third line contains n integers b1,b2,…,bn (1≤bi≤108) — the number of friends that will join Monocarp for a movie on the i-th day.
The fourth line contains n integers c1,c2,…,cn (1≤ci≤108) — the number of friends that will join Monocarp for board games on the i-th day.
The sum of n over all testcases doesn't exceed 105.
Output
For each testcase, print a single integer — the maximum total number of friends that can join Monocarp for the activities on three distinct days.
Example
Input
Copy
4
3
1 10 1
10 1 1
1 1 10
4
30 20 10 1
30 5 15 20
30 25 10 10
10
5 19 12 3 18 18 6 17 10 13
15 17 19 11 16 3 11 17 17 17
1 17 18 10 15 8 17 3 13 12
10
17 5 4 18 12 4 11 2 16 16
8 4 14 19 3 12 6 7 5 16
3 4 8 11 10 8 10 2 20 3
Output
Copy
30 75 55 56
Note
In the first testcase, Monocarp can choose day 2 for skiing, day 1 for a movie and day 3 for board games. This way, a2=10 friends will join him for skiing, b1=10 friends will join him for a movie and c3=10 friends will join him for board games. The total number of friends is 30.
In the second testcase, Monocarp can choose day 1 for skiing, day 4 for a movie and day 2 for board games. 30+20+25=75 friends in total. Note that Monocarp can't choose day 1 for all activities, because he can't try more than one activity in a single day.
In the third testcase, Monocarp can choose day 2 for skiing, day 3 for a movie and day 7 for board games. 19+19+17=55 friends in total.
In the fourth testcase, Monocarp can choose day 1 for skiing, day 4 for a movie and day 9 for board games. 17+19+20=56 friends in total.
解题说明:此题是一道标准的动态规划题,只能选择三天,而且确保之和最大,可采用三层循环进行求解。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010;
int f[8], a[3][N];
int n;
int main()
{
int t; cin >> t;
while (t--)
{
memset(f, 0, sizeof f);
cin >> n;
for (int i = 0; i < 3; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 7; j > 0; j--)
{
for (int k = 0; k < 3; k++)
{
if ((j >> k) & 1)
{
f[j] = max(f[j], f[j - (1 << k)] + a[k][i]);
}
}
}
}
cout << f[7] << endl;
}
return 0;
}