算法训练 最小乘积(基本型)
【摘要】
问题描述
给两组数,各n个。 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25
输入格式
...
问题描述
给两组数,各n个。
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为:1 3 -5和-2 4 1
那么对应乘积取和的最小值应为:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为:1 3 -5和-2 4 1
那么对应乘积取和的最小值应为:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
输入格式
第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。
n<=8,T<=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.Scanner;
-
-
public class Main
-
{
-
-
publicstatic void main(String[] args)
-
{
-
// TODO Auto-generated methodstub
-
Scanner sc = newScanner(System.in);
-
int t = sc.nextInt();
-
for (int l = 0; l < t;l++)
-
{
-
int n = sc.nextInt();
-
int[] a = new int[n];
-
int[] b = new int[n];
-
for (int i = 0; i < n; i++)
-
{
-
a[i] =sc.nextInt();
-
}
-
for (int i = 0; i < n; i++)
-
{
-
b[i] =sc.nextInt();
-
}
-
f(a);
-
f(b);
-
int sum = 0;
-
for (int i = 0; i < n; i++)
-
{
-
sum = sum+ a[i] * b[n -1-i];
-
}
-
System.out.println(sum);
-
}
-
}
-
publicstatic void f(int[] arr)
-
{
-
int i, j, t;
-
for (i = 1; i <arr.length; i++)
-
{
-
t = arr[i];
-
j = i - 1;
-
while (j >= 0 && t > arr[j])
-
{
-
arr[j + 1]= arr[j];
-
j--;
-
-
}
-
arr[j + 1] = t;
-
}
-
}
-
}
注:这是小编测试成功的代码,可以直接复制使用,,,
文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。
原文链接:czhenya.blog.csdn.net/article/details/76091903
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)