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

举报
陈言必行 发表于 2021/08/13 22:49:39 2021/08/13
【摘要】 问题描述 给两组数,各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
输入格式
第一个行一个数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



      
  1. import java.util.Scanner;
  2. public class Main
  3. {
  4. publicstatic void main(String[] args)
  5. {
  6. // TODO Auto-generated methodstub
  7. Scanner sc = newScanner(System.in);
  8. int t = sc.nextInt();
  9. for (int l = 0; l < t;l++)
  10. {
  11. int n = sc.nextInt();
  12. int[] a = new int[n];
  13. int[] b = new int[n];
  14. for (int i = 0; i < n; i++)
  15. {
  16. a[i] =sc.nextInt();
  17. }
  18. for (int i = 0; i < n; i++)
  19. {
  20. b[i] =sc.nextInt();
  21. }
  22. f(a);
  23. f(b);
  24. int sum = 0;
  25. for (int i = 0; i < n; i++)
  26. {
  27. sum = sum+ a[i] * b[n -1-i];
  28. }
  29. System.out.println(sum);
  30. }
  31. }
  32. publicstatic void f(int[] arr)
  33. {
  34. int i, j, t;
  35. for (i = 1; i <arr.length; i++)
  36. {
  37. t = arr[i];
  38. j = i - 1;
  39. while (j >= 0 && t > arr[j])
  40. {
  41. arr[j + 1]= arr[j];
  42. j--;
  43. }
  44. arr[j + 1] = t;
  45. }
  46. }
  47. }


注:这是小编测试成功的代码,可以直接复制使用,,,

 

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76091903

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。