資源限制
時間限制:1.0s 記憶體限制:512.0MB
問題描述
給兩組數,各n個。
請調整每組數的排列順序,使得兩組資料相同下标元素對應相乘,然後相加的和最小。要求程式輸出這個最小值。
例如兩組數分别為:1 3 -5和-2 4 1
那麼對應乘積取和的最小值應為:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
輸入格式
第一個行一個數T表示資料組數。後面每組資料,先讀入一個n,接下來兩行每行n個數,每個數的絕對值小于等于1000。
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
using namespace std;
int main(){
int n,t,i,j,m;
cin>>t;
while(t--){
cin>>n;
int a[n+8];
int b[n+8];
for(i=0;i
cin>>a[i];
}
for(i=0;i
cin>>b[i];
}
for(i=0;i
for(j=i+1;j
if(a[i]
m=a[i];
a[i]=a[j];
a[j]=m;
}
if(b[i]>b[j]){
m=b[i];
b[i]=b[j];
b[j]=m;
}
}
}
int sum=0;
for(i=0;i
sum+=a[i]*b[i];
}
cout<
}
return 0;
}