請調整每組數的排列順序,使得兩組數據相同下標元素對應相乘,然後相加的和最小。要求程序輸出這個最小值。
例如兩組數分別爲:1 3 -5和-2 4 1
那麼對應乘積取和的最小值應爲:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
n<=8,T<=1000
2 3 1 3 -5 -2 4 1 5 1 2 3 4 5 1 0 1 0 1
樣例輸出
-25
6
*/
# include <stdio.h>
void paixu(int *, int ) ;
void jh(int * , int * ) ;
int main (void )
{
int n,zushu;
int i , j ;
scanf("%d",&zushu) ;
while( zushu -- )
{
scanf("%d",&n);
int shu1[n];
int shu2[n] ;
for( i = 0 ; i < n ;i ++ )
{
scanf("%d",&shu1[i]) ;
}
for( i = 0 ; i < n ;i ++ )
{
scanf("%d",&shu2[i]) ;
}
paixu(shu1,n);
paixu(shu2,n) ;
int he = 0 ;
for( i = 0 ,j = n - 1 ; i < n ; i ++ , j -- )
{
he += shu1[i] * shu2[j] ;
}
printf("%d\n",he) ;
}
return 0;
}
void jh(int *a , int * b)
{
int c = *a;
*a = *b ;
*b = c;
}
void paixu(int shu[],int n)
{
int i , j ;
for( i = 0 ; i < n ; i ++ )
{
for( j = n - 1 ; j > i ; j -- )
{
if( shu[j] > shu[j - 1 ])
{
jh(&shu[j] ,&shu[j-1] ) ;
}
}
}
}