标签:向量最小内积
有两个向量
样例:
输入:
n=3
输出:
-25
( 令
首先我第一感觉就是,要保证最小,
1.如果在有正有负的情况下,那么有最大的正数乘以最小的负数,
2.如果都是正数,用最大的正数乘以最小的正数,
3.如果都是负数,用最大的负数数乘以最小的负数,
其实以上的3个条件就是两个向量分别按照升序和降序排列,得到的内积最小
按照上面的方法,不断的从
举个样例试一试
如果
可以看出,如果
意味着,我们可以通过交换
延伸到
我们也同样把
#include <iostream>
#include <algorithm>
using namespace std;
int compare(int a,int b)
{
return a>b;
}
int main()
{
int n,i;
cout<<"input n: ";
cin>>n;
cout<<endl;
cout<<"input v1 :"<<endl;
int *v1=new int[n];
int *v2=new int[n];
for(i=0;i<n;i++)
{
cin>>v1[i];
}
cout<<"input v2 :"<<endl;
for(i=0;i<n;i++)
{
cin>>v2[i];
}
//v1 升序
sort(v1,v1+n);
//v2 降序
sort(v2,v2+n,compare);
int min=0;
for(i=0;i<n;i++){
min+=v1[i]*v2[i];
}
cout<<"minimum is :"<<min<<endl;
delete [] v1;
delete [] v2;
return 0;
}
input n: 3
input v1 :
1 3 -5
input v1 :
-2 4 1
minimum is :-25
标签:向量最小内积
原文地址:http://blog.csdn.net/lizo_is_me/article/details/43672911