题目描述:
有两个向量,允许交换向量内的任意分量。计算两个向量数量积的最小值。
解题思路:
直接用贪心,将一个从大到小排序,一个从小到大排序,然后乘起来。
代码:
以前code人心弦的时候做过,直接用jfs的标程了……写的飘逸但是有用的不多……前面的都省了,直接从有用的那块开始了。
int T;
RI (T);
while (T --){
vector<ll> v1, v2;
int n;
RI (n);
FOR (i, 1, n){
int t;
RI (t);
v1.PB ((ll)t);
}
FOR (i, 1, n){
int t;
RI (t);
v2.PB ((ll)t);
}
sort (ALL (v1));
sort (ALL (v2),greater<ll>());
ll ans = 0;
FOR (i, 0, SIZE (v1)-1){
ans += v1[i]*v2[i];
}
cout << ans <<endl;
}