算法训练 最小乘积
時間限制: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 1 #include<stdio.h> 2 #include<algorithm> 3 #include <iostream> 4 using namespace std; 5 int T,n,i,j,a[10],b[10],sum; 6 int main() 7 { 8 scanf("%d",&T); 9 while(T--) 10 { 11 sum=0; 12 scanf("%d",&n); 13 for(i=0;i<n;i++) 14 scanf("%d",&a[i]); 15 for(i=0;i<n;i++) 16 scanf("%d",&b[i]); 17 sort(a,a+n); 18 sort(b,b+n); 19 for(i=0;i<n;i++) 20 sum+=a[i]*b[n-i-1]; 21 printf("%d\n",sum); 22 } 23 return 0; 24 }
請調整每組數的排列順序,使得兩組數據相同下標元素對應相乘,然后相加的和最小。要求程序輸出這個最小值。
例如兩組數分別為: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 1 #include<stdio.h> 2 #include<algorithm> 3 #include <iostream> 4 using namespace std; 5 int T,n,i,j,a[10],b[10],sum; 6 int main() 7 { 8 scanf("%d",&T); 9 while(T--) 10 { 11 sum=0; 12 scanf("%d",&n); 13 for(i=0;i<n;i++) 14 scanf("%d",&a[i]); 15 for(i=0;i<n;i++) 16 scanf("%d",&b[i]); 17 sort(a,a+n); 18 sort(b,b+n); 19 for(i=0;i<n;i++) 20 sum+=a[i]*b[n-i-1]; 21 printf("%d\n",sum); 22 } 23 return 0; 24 }
?
總結
- 上一篇: C++宏定义中#与##的妙用
- 下一篇: 怎样与人沟通?