描述
一天中午,有 N 個學生來到食堂買飯,他們需要排成了一個一字隊伍並按順序打飯,
現在已經知道了每個人買飯的時間, 現在食堂的管理員希望知道他們按照怎樣的順序買飯能夠使得所有人等待時間的總和最小。
(每個人等待的時間 = 排在他前面的人的打飯時間和 + 自己打飯的時間)
輸入
一個整數 T(T≤30)表示數據組數,每組數據包括兩行,第一行一個整數 N 表示人數,
第二行 N 個整數表示每個人買飯所需要的時間,所有整數均不超過 100。
輸出
每組數據輸出一行,包括一個整數,表示所有人等待時間總和的最小值。
樣例輸入
2
5
1 2 3 4 5
5
45 10 48 37 9
樣例輸出
35
334
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
return a<b;
}
int main()
{
int N,n,a[100],s[100],sum,i,j;
scanf("%d",&N);
while(N--)
{
sum=0;
memset(s,0,sizeof(int)*100);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n,cmp);
for(j=0;j<n;j++)
{
for(i=0;i<=j;i++)
{
s[j]=s[j]+a[i];
}
}
for(j=0;j<n;j++)
{
sum=sum+s[j];
}
printf("%d\n",sum);
}
return 0;
}