最小乘积(基本型)

问题描述
  给两组数,各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"stdio.h"



void swap(int *a,int *b){

    int temp;

    temp=*a;

    *a=*b;

    *b=temp;

}



void maxSort(int a[],int n){

    int i,j;

    for(i=0;i<n;i++)

        for(j=i;j<n;j++){

            int temp;

            if(a[i]<a[j])

                swap(&a[i],&a[j]);

        }

}



void minSort(int a[],int n){

    int i,j;

    for(i=0;i<n;i++)

        for(j=i;j<n;j++){

            if(a[i]>a[j])

                swap(&a[i],&a[j]);

        }

}



int main()

{

    int T;

    int i,j;

    int n;

    int sum[1000];

    scanf("%d",&T);



    for(i=0;i<T;i++)

    {

        sum[i]=0;

        scanf("%d",&n);

        int a[2][10];

        for(j=0;j<n;j++)

            scanf("%d",&a[0][j]);

        for(j=0;j<n;j++)

            scanf("%d",&a[1][j]);

        maxSort(a[0],n);

        minSort(a[1],n);



        for(j=0;j<n;j++)

            sum[i]+=(a[0][j]*a[1][j]);

        

    }

    for(i=0;i<T;i++)

            printf("%d\n",sum[i]);

    return 0;

}
View Code

 

 

你可能感兴趣的:(最小乘积(基本型))