最小数积 1403

这道题yaozhaoguilv

题目描述:

有两个向量 v1 = (x1, x2, x3, ..., xn),v2 = (y1, y2, y3, ..., yn)。允许任意交换 v1 和 v2 的分量顺序,试计算 v1 和 v2 的内积 x1y1 + x2y2 + ... + xn *yn 的最小值。(1 <= n <= 800,-1000 <= xi <= 1000, -1000 <= yi <= 1000)

输入描述:

第一行输入一个正整数 n,表示每个向量中的分量数目。

第二行输入向量 v1 的 n 个整数分量,每个分量之间用一个空格分隔。

第三行输入向量 v2 的 n 个整数分量,每个分量之间用一个空格分隔。

输出描述:

一个整数,占一行,两个向量乘积的最小值。

样例输入:

3

1 3 -5

-2 4 1

样例输出:

-25

思想:一个从小到大排列,一个从大到小排列

乘积最小。

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int n,i,j;
 5     while(cin>>n){
 6         long v1[n];
 7         long v2[n];
 8         long sum=0,p,q;
 9         for(i=0;i<n;i++){
10             cin>>v1[i];
11         }
12         for(i=0;i<n;i++){
13             cin>>v2[i];
14         }
15         for(i=0;i<n-1;i++){
16             for(j=0;j<n-i-1;j++){
17                 if(v1[j]>v1[j+1]){
18                     p=v1[j];
19                     v1[j]=v1[j+1];
20                     v1[j+1]=p;
21                 }
22                 if(v2[j]<v2[j+1]){
23                     q=v2[j];
24                     v2[j]=v2[j+1];
25                     v2[j+1]=q;
26                 }
27             }
28         }
29         for(i=0;i<n;i++){
30             sum=sum+v1[i]*v2[i];
31         }
32         cout<<sum<<endl;
33     }
34     return 0;
35 }

猜你喜欢

转载自www.cnblogs.com/zq-dmhy/p/11074345.html