训练1-L


n个人一起排队接水,第i个人需要a i的时间来接水。
1 <= n <= 1000
1 <= a ,i<= 1000
同时只能有一个人接水,正在接水的人和没有接水的人都需要等待。
完成接水的人会立刻消失,不会继续等待。
你可以决定所有人接水的顺序,并希望最小化所有人等待时间的总和。
Input
第一行一个整数n
接下来n行,每行一个整数表示a i
Output
一行一个整数,表示所有人等待时间的总和的最小值
Sample Input
3
1
2
3
Sample 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);
	
}
之前做过类似的,几乎一样,没怎么改就拿过来了,很简单

...

猜你喜欢

转载自blog.csdn.net/qq_41785863/article/details/80631317