最小向量乘积
2014-05-22 22:44
267 查看
题目详情:
两个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]之间。
输出格式:
对于每组数据,输出一行,包含一个整数,代表可以调整到的最小的点积。
实验代码:
<span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> #define MAX_LENGTH 50 void sort(int* array, int length) { int i = 0, j = 0, m = 0, temp =0; for(i = 1; i < length; i++) { m = i; for(j = m - 1; j >= 0; j--) { if (array[j] > array[m]) { break; } temp = array[j]; array[j] = array[m]; array[m] = temp; m--; } } return; } int minMulti(int* array_a, int* array_b, int length) { int i = 0, result = 0; sort(array_a, length); sort(array_b, length); for (; i < length; i++) { result += array_a[i] * array_b[length - 1 - i]; } return result; } int main() { int length = 0; int i = 0; int array_a[MAX_LENGTH]; int array_b[MAX_LENGTH]; while(1) { scanf("%d", &length); for (i = 0; i < length; i++) scanf("%d", &array_a[i]); for (i = 0; i < length; i++) scanf("%d", &array_b[i]); printf("%d\n", minMulti(array_a, array_b, length)); } return 0; } </span>
相关文章推荐
- 最小向量乘积
- 编程挑战-高校俱乐部 1.最小向量乘积 2.独特区间
- csdn 最小向量乘积
- 算法训练 最小乘积(基本型)
- 算法训练 最小乘积
- 递增数列中找和为s乘积最小的两个数
- 最小乘积
- Ekka Dokka -- 乘积奇数最大偶数最小
- 算法笔记_062-蓝桥杯练习 最小乘积(基本型)(Java)
- 编写一个函数从一定的向量A中删除元素值在最小跟最大之间的所有元素
- bzoj3571: [Hnoi2014]画框 最小乘积匹配+最小乘积XX总结,
- 蓝桥杯 算法训练 最小乘积(基本型)
- 蓝桥杯——最小乘积(基本型)
- 求最小子序列和,最小的正子序列和,最大子序列乘积问题
- poj 3308 最小点权覆盖(对数乘积)
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 算法训练 最小乘积(基本型)
- 算法-蓝桥杯-算法训练 最小乘积(基本型) (JAVA)
- bzoj 2395 [Balkan 2011]Timeismoney (最小乘积生成树)
- Leetcode—152. Maximum Product Subarray 最小乘积子串