1. 程式人生 > >藍橋杯之演算法訓練 最小乘積(基本型)

藍橋杯之演算法訓練 最小乘積(基本型)

題目:演算法訓練 最小乘積(基本型)

問題描述
  給兩組數,各n個。
  請調整每組數的排列順序,使得兩組資料相同下標元素對應相乘,然後相加的和最小。要求程式輸出這個最小值。
  例如兩組數分別為:1 3  -5和-2 4 1

  那麼對應乘積取和的最小值應為:
  (-5) * 4 + 3 * (-2) + 1 * 1 = -25
輸入格式
  第一個行一個數T表示資料組數。後面每組資料,先讀入一個n,接下來兩行每行n個數,每個數的絕對值小於等於1000。
  n<=8,T<=1000
輸出格式
  一個數表示答案。
樣例輸入
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1

樣例輸出
-25
6

答案:

import java.util.Arrays;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
//      輸入有幾組資料
        int n = in.nextInt();
        int sum = 0;
        while (n != 0)
        {
//          這組資料每個陣列有幾個元素
int m = in.nextInt(); // 建兩個陣列 int[] a = new int[m]; int[] b = new int[m]; for (int i = 0; i < m; i++) { a[i] = in.nextInt(); } for (int i = 0; i < m; i++) { b[i] = in
.nextInt(); } // 要兩組資料相同下標元素對應相乘,然後相加的和最小,則要兩組數中最大的數乘以最小的數,要事先排好序 Arrays.sort(a); Arrays.sort(b); for (int i = 0, j = a.length - 1; i < a.length; i++, j--) { sum += a[i] * b[j]; } System.out.println(sum); sum = 0; n--; } } }