最小乘积
2015-03-13 13:19
225 查看
/**
* 给两组数,各n个。
* 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。
*/
import java.util.*;
import java.io.*;
public class 最小乘积 {
public static void JianArray(Integer[] b1) {
Arrays.sort(b1);
int i = 0, n = b1.length - 1;
while (n > 2 * i) {
Integer t = b1[i];
b1[i] = b1[n - i];
b1[n - i] = t;
i++;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
int n = in.nextInt();
for (int i = 0; i < n; i++) {
int num = in.nextInt();
Integer[] a = new Integer[num];
Integer[] b = new Integer[num];
for (int j = 0; j < num; j++) {
a[j] = in.nextInt();
}
for (int j = 0; j < num; j++) {
b[j] = in.nextInt();
}
Arrays.sort(a);
JianArray(b);
int sum = 0;
for (int j = 0; j < num; j++) {
sum += a[j] * b[j];
}
System.out.println(sum);
}
}
}
* 给两组数,各n个。
* 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。
*/
import java.util.*;
import java.io.*;
public class 最小乘积 {
public static void JianArray(Integer[] b1) {
Arrays.sort(b1);
int i = 0, n = b1.length - 1;
while (n > 2 * i) {
Integer t = b1[i];
b1[i] = b1[n - i];
b1[n - i] = t;
i++;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
int n = in.nextInt();
for (int i = 0; i < n; i++) {
int num = in.nextInt();
Integer[] a = new Integer[num];
Integer[] b = new Integer[num];
for (int j = 0; j < num; j++) {
a[j] = in.nextInt();
}
for (int j = 0; j < num; j++) {
b[j] = in.nextInt();
}
Arrays.sort(a);
JianArray(b);
int sum = 0;
for (int j = 0; j < num; j++) {
sum += a[j] * b[j];
}
System.out.println(sum);
}
}
}
相关文章推荐
- 5.数字拆分成4段,怎样使得4段的乘积最小【dp】
- 算法-蓝桥杯-算法训练 最小乘积(基本型) (JAVA)
- 蓝桥杯算法训练 最小乘积(基本型)
- 算法训练 最小乘积(基本型)
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 蓝桥杯-最小乘积-贪心-java
- 最小向量乘积
- 51 汇编语言编程:求最大、最小值的乘积
- 2016+蓝桥杯算法训练——最小乘积(基本型)
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 算法训练 最小乘积(基本型)
- 算法训练 最小乘积
- [最小乘积生成树 分治] BZOJ 2395 [Balkan 2011]Timeismoney
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 算法训练 最小乘积(基本型)
- 树(最小乘积生成树,克鲁斯卡尔算法):BOI timeismoney
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 数字拆分成4段,怎样使得4段的乘积最小
- 剑指offer系列之四十一:和为S的两个数字且乘积最小