谁帮忙找个茬

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;
}