训练1-L
1 <= n <= 1000
1 <= a,i<= 1000
同时只能有一个人接水,正在接水的人和没有接水的人都需要等待。
完成接水的人会立刻消失,不会继续等待。
你可以决定所有人接水的顺序,并希望最小化所有人等待时间的总和。
Input
第一行一个整数n
接下来n行,每行一个整数表示ai
Output
接下来n行,每行一个整数表示ai
Output
一行一个整数,表示所有人等待时间的总和的最小值
Sample Input
3 1 2 3Sample Output
10
#include<stdio.h>
int main()
{
int a[1000],n,i,j,max,t,sum=0;
scanf("%d",&n); //思路是花费时间最多的人排最前面,依次类推,然后计算出时间即可
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=n;j>1;j--) //对数组排序,这里用的是选择排序,只要排序就行
{
max=0;
for(i=1;i<j;i++)
if(a[i]>a[max])
max=i;
if(max!=j-1)
{
t=a[max];
a[max]=a[j-1];
a[j-1]=t;
}
}
for(i=n,j=0;i>0&&j<n;i--,j++)
sum+=i*a[j];
printf("%d\n",sum);
}
之前做过类似的,几乎一样,没怎么改就拿过来了,很简单...