ALGO-53 最小乘积(基本型)

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

时间限制: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.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();

        while (0 != t--) {
            List<Integer> l1 = new ArrayList<Integer>();
            List<Integer> l2 = new ArrayList<Integer>();
            int n = sc.nextInt();
            for (int i = 0; i < n; i++) {
                l1.add(sc.nextInt());
            }
            for (int i = 0; i < n; i++) {
                l2.add(sc.nextInt());
            }
            Collections.sort(l1);
            Collections.sort(l2);
            int sum = 0;
            for (int i = 0; i < n; i++) {
                sum += l1.get(i) * l2.get(n - i - 1);
            }
            System.out.println(sum);

        }
        sc.close();
    }
}

思路:将题目中给出的两组数据排序,大的和小的相乘。遍历一遍输出结果即可。
时间: 2024-12-17 02:38:41

ALGO-53 最小乘积(基本型)的相关文章

C语言 &#183; 最小乘积(基本型)

问题描述 给两组数,各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.0s   内存限制:512.0MB 问题描述 给两组数,各n个. 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小.要求程序输出这个最小值. 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25 输入格式 第一个行一个数T表示数据组数.

蓝桥杯 算法训练 最小乘积(基本型) (水题,排序)

算法训练 最小乘积(基本型) 时间限制: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<=

算法训练——最小乘积——基本型

//最小乘积(基本型) #include<stdio.h> #include<stdlib.h> #define MAXN 100 int comp_a2(const void*a,const void*b)//用来做比较的函数. { return *(int*)a - *(int*)b; } int comp_a1(const void*a,const void*b)//用来做比较的函数. { return *(int*)b - *(int*)a; //降序 } int main

算法笔记_062:蓝桥杯练习 最小乘积(基本型)(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给两组数,各n个. 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小.要求程序输出这个最小值. 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25 输入格式 第一个行一个数T表示数据组数.后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000. n<=8,T<=1000 输出格式 一个数表

蓝桥杯软件大赛练习系统——算法训练 最小乘积(基本型)

************************************************************************ * 精品书籍推荐:<算法竞赛入门经典> * 该书对于ACMer几乎人手一本,所以在这里倾力推荐,读完这本书,我们就可以开始我们的算法征程了!!! * 看完上面那本书,还有一本它的升级版:<算法竞赛入门经典:训练指南> * 再读完这本书,你就超神了!!! *******************************************

最小乘积(基本型)

#include <cstdio> #include <algorithm> #include <iostream> using namespace std; int main() { int s[10000],str[10000]; int n,i,j,c,sum,t; scanf("%d",&t); while(t--) { sum=0; scanf("%d",&n); for(i=0;i<n;i++)

bzoj3571: [Hnoi2014]画框 最小乘积匹配+最小乘积XX总结,

思路大概同bzoj2395(传送门:http://www.cnblogs.com/DUXT/p/5739864.html),还是将每一种匹配方案的Σai看成x,Σbi看成y,然后将每种方案转化为平面上的点,再用km去找最远的点就行了. 然而几个月前就学过km且到现在还未写过一道km的题的我并不知道km如何对于负权给出最优解.... #define XX 某传统算法(例如:最小生成树,二分图最优带权匹配什么的) 顺便总结一下最小乘积XX 即对于XX引入两个权值的概念(或是多个权值,一般是两个),看

bzoj2395[Balkan 2011]Timeismoney最小乘积生成树

所谓最小乘积生成树,即对于一个无向连通图的每一条边均有两个权值xi,yi,在图中找一颗生成树,使得Σxi*Σyi取最小值. 直接处理问题较为棘手,但每条边的权值可以描述为一个二元组(xi,yi),这也就不难想到将生成树转化为平面内的点,x代表Σxi,y代表Σyi(注意这里的xi,yi指的是在生成树中的边的权值),那么问题就变成了在平面内找一个点使得x*y最小,那么显然这个点是在下凸壳上的. 因此可以首先找出两个一定在凸包上的点,例如A(minx,y),B(miny,x),在直线AB下方找一个在凸