最小乘积
2016-03-12 22:59
399 查看
题目描述
给两组数,各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
给两组数,各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
#include<stdio.h> #include<string.h> int a[10]; int b[10]; void Bubble_Sort(int num[],int n) { int temp; for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { if(num[i]>num[j]) { temp=num[i]; num[i]=num[j]; num[j]=temp; } } } } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<n;i++) scanf("%d",&b[i]); Bubble_Sort(a,n); Bubble_Sort(b,n); int sum=0; for(int i=0;i<n;i++) { sum+=a[i]*b[n-1-i]; } printf("%d\n",sum); } return 0; }
相关文章推荐
- [SCOI2009] [BZOJ1026] Windy数 - 数位DP
- Git创建分支
- Oracle常见错误总结
- lintcode: Wiggle Sort Show result
- 软件测试笔试和面试
- matlab调用Java函数
- 统计学习方法概论
- 70.最小生成树
- 第二周作业
- zookeeper 学习命令
- 70.最小生成树
- 70.最小生成树
- vbscript基础1
- 设计模式之观察者模式
- 解决HttpClient访问返回403 forbiddent
- HDU——1042N!(大数阶乘乘法)
- C++学习笔记之多态与虚函数,虚函数表
- chart.js绘图,如何显示图例?
- 20145330孙文馨 《Java程序设计》第二周学习总结
- 测试