请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为: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
和其他蓝桥杯题目一样
总喜欢在题意上绕
一样难懂这个T
到底是什么
还好看了样例
有了这段代码
#include<stdio.h>
int a1[100000];
int a2[100000];
int sum[10000];
void kuai (int *a,int left,int right)
{
if (left>=right)
{
return;
}
int i=left;
int j=right;
int key=a[left];
while (i<j)
{
while(i<j&&a[j]>=key)
{
j--;
}
a[i]=a[j];
while(i<j&&a[i]<=key)
{
i++;
}
a[j]=a[i];
}
a[i]=key;
kuai(a,left,i-1);
kuai(a,i+1,right);
}
int main()
{
int T,n;
scanf("%d",&T);
int i,j;
for (i=0;i<T;i++)
{
scanf("%d",&n);
for (j=0;j<n;j++)
{
scanf("%d",&a1[j]);
}
for (j=0;j<n;j++)
{
scanf("%d",&a2[j]);
}
kuai(a1,0,n-1);
kuai(a2,0,n-1);
sum[i]=0;
for (j=0;j<n;j++)
{
sum[i]+=a1[j]*a2[n-j-1];
}
}
for (i=0;i<T;i++)
{
printf("%d\n",sum[i]);
}
return 0;
}