EOJ3003-最小向量点积
2020-04-05 18:20
232 查看
题目
两个向量a=[a1,a2,⋯,an] 和b=[b1,b2,⋯,bn] 的点积定义为 :
例如,两个三维向量 [1,3,−5] 和 [4,−2,−1] 的点积是
假设允许对每个向量中的坐标值进行重新排列。找出所有排列中点积最小的一种排列,输出最小的那个点积值。上例中的一种排列 [3,1,−5] 和 [−2,−1,4] 的点积为−27,这是最小的点积。
输入格式
第 1 行:一个整数 T (1⩽T⩽10) 为问题数。
接下来每个问题有 3 行。第 1 行是一个整数 n (1⩽n⩽1000),表示两个向量的维数。第2 行和第 3 行分别表示向量 a 和向量 b。每个向量都有 n 个由一个空格分隔的坐标值 (−1000⩽坐标值⩽1000) 组成。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。
然后对应每个问题在一行中输出最小点积值。
样例
input 3 3 3 1 -5 -2 -1 4 1 2 -298 5 1 2 3 4 5 1 0 1 0 1 output case #0: -27 case #1: -596 case #2: 6
code
思路:一个递增,一个递减,乘积最小,数组的排序用到了
<algorithm>中的sort函数
#include <iostream> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a > b; } int main() { int N; int num; int a[1000]; int b[1000]; int sum; cin >> N; for (int i = 0; i < N; i++) { sum = 0; cin >> num; for (int j = 0; j < num; j++) cin >> a[j]; for (int j = 0; j < num; j++) cin >> b[j]; sort(a, a + num); sort(b, b + num, cmp); for (int j = 0; j < num; j++) { sum += a[j] * b[j]; } cout << "case #" << i << ":" << endl; cout << sum << endl; } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 最小向量积
- 线代总结5,6,7 特征向量,最小二乘,对称矩阵
- 最小向量积
- 证明AX=0的最小二乘解是ATA最小特征值对应的特征向量
- 给出两个相同维数的向量,向量的分量顺序任意,求向量内积的最小值
- 编程挑战-高校俱乐部 1.最小向量乘积 2.独特区间
- 编写一个函数从一定的向量A中删除元素值在最小跟最大之间的所有元素
- 最小熵原理:“物以类聚”之从图书馆到词向量
- 8.4.2.2_利用最小平移向量使两个物体粘在一起
- U3D-根据两2D向量,求最小夹角
- 最小向量乘积
- 【HDU5734 2016 Multi-University Training Contest 2A】【公式代入推导】Acperience n维向量各有加减最小模长
- 使用R语言得到向量中所有的最大值或者最小值的下标
- CodeForces-598C(向量最小夹角)
- 稀疏矩阵求最小或最大的K个特征值及其特征向量
- c++ 向量 最大值 最小值 位置 删除元素
- 最小向量乘积
- csdn 最小向量乘积
- 【最小生成树】Prim算法和Kruskal算法的区别对比
- bzoj 2654 tree - 二分法 - 最小生成树