csdn 最小向量乘积
来源:互联网 发布:linux 中断 工作队列 编辑:程序博客网 时间:2024/04/29 11:43
题目:
两个N维向量的点积定义为,对应维度上的数的乘积之和。
两个三维向量[1, 3, −5]和[4, −2, −1]的点积是1 * 4 + 3 * (-2) + (-5) * (-1) = 3
现在允许我们对两个向量里的维度重新排列,让点积尽可能小。
例如上述两个向量,我们可以调整维[3,1,-5]和[-2,-1,4],点积是-27。
输入格式:
多组数据,每组数据第一行是一个整数n,表示向量的维数。1<=n<=100000。
下面两行,每行是n个空格分隔的整数表示两个n维向量,每一维的范围都是[-1000000,+1000000]之间。
输出格式:
对于每组数据,输出一行,包含一个整数,代表可以调整到的最小的点积。
分析:
要想最后得到的结果最小,所以要把大的数尽量和小的数相乘。我们将第一个向量按升序排序,第二个向量按降序排序,然后计算所有a[i]*b[i]的和,即为所求。
下面附上代码:
#include <algorithm>#include <functional>#include <iostream>#include <cstdio>using namespace std;typedef long long ll;const int maxn = 100000;int n;int a[maxn],b[maxn];ll res;int main(){ int i; while(scanf("%d",&n) == 1){ for(i = 0; i < n; i++){ scanf("%d",&a[i]); } for(i = 0; i < n; i++){ scanf("%d",&b[i]); } sort(a,a+n,greater<int>()); sort(b,b+n); res = 0; for(i = 0; i < n; i++){ res += 1LL*a[i]*b[i]; } printf("%I64d\n",res); } return 0;}
0 0
- csdn 最小向量乘积
- 最小向量乘积
- 最小向量乘积
- CSDN之编程挑战赛-玩转算法:最小向量乘积
- 向量乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 最小乘积
- 编程挑战-高校俱乐部 1.最小向量乘积 2.独特区间
- 蓝桥杯 最小乘积
- 最小乘积型
- 最小乘积(基本型)
- 最小乘积(基本型)
- hdoj 1134 Game of Connections 【catalan数列】
- hdu 4870 Rating (高斯消元解概率dp)
- Exception
- [web安全]SQL注入防御方法总结
- 驱动第一天(韦东山视频) 学习笔记
- csdn 最小向量乘积
- java的数据类型——基本类型、引用类型
- Android Json处理之Gson
- 黑马程序员——java基础学习---泛型、Map集合及扩展、高级for循环
- dlopen和dlsym
- Simple prefix compression
- 优秀管理者的五个好习惯
- iOS日期的比较
- 周记——20150504