藍橋杯之演算法訓練 最小乘積(基本型)
阿新 • • 發佈:2019-01-01
題目:演算法訓練 最小乘積(基本型)
問題描述
給兩組數,各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--;
}
}
}