【题目描述】
在一个医院B 超室,有n个人要做不同身体部位的B超,已知每个人需要处理的时间为ti,(0<i<=n),请求出一种排列次序,使每个人排队等候时间总和最小。
输入数据:第1行一个正整数n(你<=10000》,第2行有n
个不超过 1000的正整数ti.
输出要求:n个人排队时间最小总和。
输入输出样例
输入:4
5 10 87
输出:
67
#include<iostream>
using namespace std;
int a[10000];
void quicksort(int ,int );
int main()
{
int n;
cin>>n;
int temp;
temp = n;
int sum = 0;
int i = 0;
while(n)
{
cin>>a[i];
i++;
n--;
}
quicksort(0,temp-1);
for(i = 0; i<temp ; i++)
{
sum = sum+a[i]*(temp-i);
}
cout<<sum;
return 0;
}
void quicksort(int left ,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp = a[left];
i = left;
j = right;
while(i!=j)
{
while(a[j]>=temp && i<j)
j--;
while(a[i]<=temp && i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left] = a[i];
a[i] = temp;
quicksort(left,i-1);
quicksort(i+1,right);
return;
}