6. 红黄蓝筷子
题目ID:8430选做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 524288kB
题目描述
大哈作为一个追求生活品质的人,他的筷子自然也是非同凡响。一般人家里都是普通筷子,而他的筷子却有红黄蓝三种不同的颜色。他手里分别有n对红筷子、m对黄筷子、k对蓝筷子,这么多对的筷子的长短可能各不相同。他有天突发奇想,想到小时候玩摆火柴的游戏,觉得现在用筷子来摆矩形可能更好玩。他每次可以从所有筷子中先选出一对筷子,然后再在剩下的所有筷子中选出另一对筷子。这两对筷子的颜色要不一样,然后就可以摆成一个对边颜色相同,邻边颜色不相同的矩形了。他有这么多对筷子,所以可以摆出很多种矩形。并且根据选法的不同,每次游戏产生的所有矩形的面积之和可能不一样。现在想问你大哈怎么选,可以使得按照要求来摆的所有矩形的面积之和最大。
输入格式
第一行三个整数n、m、k (1≤n,m,k≤200)
第二行n个正整数,第i个整数代表第i对红筷子的长度
第三行m个正整数,第i个整数代表第i对黄筷子的长度
第四行k个正整数,第i个整数代表第i对蓝筷子的长度
保证所有筷子的长度不超过2000
输出格式
一个整数代表答案
样例
Input 1
1 1 1 3 5 4
Output 1
20
样例解释
选黄色筷子和蓝色筷子组成一个矩形
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
vector<int> red(n), yellow(m), blue(k);
for (int i = 0; i < n; ++i)
{
cin >> red[i];
}
for (int i = 0; i < m; ++i)
{
cin >> yellow[i];
}
for (int i = 0; i < k; ++i)
{
cin >> blue[i];
}
sort(red.rbegin(), red.rend());
sort(yellow.rbegin(), yellow.rend());
sort(blue.rbegin(), blue.rend());
long long maxAreaSum = 0;
for (int i = 0; i < min(n, 2); ++i)
{
for (int j = 0; j < min(m, 2); ++j)
{
for (int p = 0; p < min(k, 2); ++p)
{
if (i < n && j < m && p < k)
{
long long area = (long long)red[i] * yellow[j] * blue[p];
maxAreaSum = max(maxAreaSum, area);
}
}
}
}
cout << maxAreaSum << endl;
return 0;
}