最小乘积

/**

* 给两组数,各n个。

* 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。

*/

import java.util.*;

import java.io.*;

public class 最小乘积 {

public static void JianArray(Integer[] b1) {

Arrays.sort(b1);

int i = 0, n = b1.length - 1;

while (n > 2 * i) {

Integer t = b1[i];

b1[i] = b1[n - i];

b1[n - i] = t;

i++;

}

}

public static void main(String[] args) {

Scanner in = new Scanner(new BufferedInputStream(System.in));

int n = in.nextInt();

for (int i = 0; i < n; i++) {

int num = in.nextInt();

Integer[] a = new Integer[num];

Integer[] b = new Integer[num];

for (int j = 0; j < num; j++) {

a[j] = in.nextInt();

}

for (int j = 0; j < num; j++) {

b[j] = in.nextInt();

}

Arrays.sort(a);

JianArray(b);

int sum = 0;

for (int j = 0; j < num; j++) {

sum += a[j] * b[j];

}

System.out.println(sum);

}

}

}

时间: 2024-08-05 01:38:16

最小乘积的相关文章

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

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

HDU5697 刷题计划 dp+最小乘积生成树

分析:就是不断递归寻找靠近边界的最优解 学习博客(必须先看这个): 1:http://www.cnblogs.com/autsky-jadek/p/3959446.html 2:http://blog.csdn.net/u013849646/article/details/51524748 注:这里用的最小乘积生成树的思想,和dp结合 每次找满足条件的最优的点,只不过BZOJ裸题的满足条件是形成一棵树 这个题是大于m,生成树借用最小生成树进行求解最优,大于m用dp进行求解最优 #include

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<=

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<=

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下方找一个在凸

【BZOJ2395】【Balkan 2011】Timeismoney 最小乘积生成树

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46828379"); } 题解: 裸最小乘积生成树. 最小乘积生成树定义: 有一张n个点m条边的无向图,每条边有k个权值. 现在要取一个边集M使得其将所有点连通,并使 ∏ki=1(∑j∈Mjcost(j,vali))

二维最小乘积生成树学习小记

Preface 对于形如给定一些边,其边权为xi和yi,构造一个生成树,使得 我们称这棵树,为最小乘积生成树.我们可以考虑,沿用最小生成树的思想,把这种新颖的最小生成树做对. Content 算法简介 其实就是利用树形结合的思想,将点弄到平面直角坐标系上,使之明了,转化问题,求出最优解. 算法应用 应对类似的裸题,直接裸奔 算法核心 我们将sigma(xi)看成横坐标,sigma(yi)看成纵坐标,在坐标系中绘制出来.并在x,y轴作垂线,构成一个正方形 我们要求一种方案xy=k最小,也就是这个正