首页 > 学院 > 开发设计 > 正文

算法训练 最小乘积(基本型)

2019-11-08 01:40:43
字体:
来源:转载
供稿:网友

算法训练 最小乘积(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述   给两组数,各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 sc=new Scanner(System.in); int t=sc.nextInt(); for(int cnt=0;cnt<t;cnt++){ 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(); } Arrays.sort(a); Arrays.sort(b); int sum=0; for(int i=0;i<n;i++){ sum=sum+a[i]*b[n-i-1]; } System.out.PRintln(sum); } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表