さいこうを創出する


プログラマ-最高価格の作成

問題の説明


同じ長さの配列A,Bが2つある.各配列は自然数で構成されている.
アレイA,Bからそれぞれ1つの数字を抽出し,2つの数字を乗算する.これらのプロシージャを繰り返す長さは、アレイの長さであり、2つの数の値が加算されます.目標は、最終的に蓄積された値を最小限に抑えることです.(各配列からk番目の数字が抽出された場合、次は再抽出できません.)
例えば、A = [1, 4, 2]B = [4, 5, 4]
  • Aの1番目の数字1、Bから2番目の数字5を乗算します.(積算値:0+5(1 x 5)=5)
  • Aの2番目の数字4、Bの3番目の数字4に乗算します.(積算値:5+16(4 x 4)=21)
  • Aの3番目の数字2、Bの1番目の数字4に乗算します.(積算値:21+8(2 x 4)=29)
  • すなわち、この場合、29が返される.
    配列A,Bが与えられると,最終的に蓄積された最大値を返すソルバが完了する.

    せいげんじょうけん

  • アレイA、Bサイズ:1000以下自然数
  • 配列A,Bの元素サイズ:1000以下自然数
  • I/O例


    ABanswer [1, 4, 2] [4, 5, 4] 29 [1, 2] [3, 4] 10

    に答える

    def solution(A, B):
        answer = 0
        A.sort()
        B.sort(reverse=True)
    
        for a, b in zip(A, B):
            answer += a * b
    
        return answer

    ソリューション


    問題のI/O例の手順を確認しました.これは,乗算された値を累積することによって最小値を創造する問題である.
    乗算の特徴により、2つの被演算子の数が大きいほど、その値が大きくなります.これはかなり幾何級数の増加と言える.
    例えば、1 * 6は6であり、2 * 7は14である.単純な被演算子は1増加したが,演算結果は大きく増加した.
    この点を考慮すると、A、Bのうちの1つの最大値は、他の最小値と積積してこそ最小値を得ることができると思います.
    したがって,Aを昇順,Bを降順に並べ替え,その値を乗じて最昇順を得ることができる.

    他人の解答

    def getMinSum(A,B):
        return sum(a*b for a, b in zip(sorted(A), sorted(B, reverse = True)))
    Pythonについては、次の行で私の答えを表すことができます.