蓝桥杯-最小乘积-贪心-java
2017-04-17 15:36
288 查看
问题描述 给两组数,各n个。
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为:1 3 -5和-2 4 1
那么对应乘积取和的最小值应为:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25输入格式 第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。
n<=8,T<=1000输出格式 一个数表示答案。样例输入
样例输出-25
6
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为: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) { // TODO 自动生成的方法存根 Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int m = scanner.nextInt(); for (int i = 0; i < m; i++) { int n = scanner.nextInt(); int [] shu = new int ; int [] arr = new int ; for (int j = 0; j < arr.length; j++) { shu[j] = scanner.nextInt(); } for (int j = 0; j < arr.length; j++) { arr[j] = scanner.nextInt(); } Arrays.sort(shu);Arrays.sort(arr); int a = 0;int b = n-1; int c = 0;int d = n-1; int sum = 0; while (a<=b&&c<=d) { int q = shu[a]*arr[d]; int w = arr[c]*shu[b]; if (q<w) { sum += q; a+=1;d-=1; }else { sum += w; c+=1;b-=1; } } System.out.println(sum); } } } }
相关文章推荐
- 算法训练 最小乘积(基本型) java蓝桥杯
- 算法笔记_062:蓝桥杯练习 最小乘积(基本型)(Java)
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 算法-蓝桥杯-算法训练 最小乘积(基本型) (JAVA)
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 蓝桥杯-最小乘积(java)
- 蓝桥杯 最小乘积【基本型】(java题解)
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 蓝桥杯 算法训练 最小乘积(基本型)
- 蓝桥杯 最小乘积
- 蓝桥杯 - 最小乘积(基本型)
- 蓝桥杯 算法训练 最小乘积(基本型)
- 【贪心】最大乘积-贪心-高精度-java
- 【codeforces 721D】【贪心 堆】D. Maxim and Array 【给出n个数,k次机会,每次使得任意一个数字减少或者加上x,使得最后的乘积最小,最后的n个数大小】
- 蓝桥杯算法训练——最小乘积(基本型)
- 蓝桥杯-乘积最大-动态规划-java
- 蓝桥杯 最小乘积(基本型)
- 动态规划——看似dp的贪心问题最大乘积(蓝桥杯试题集)