训练1-L

xiaoxiao2021-02-28  27

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); }之前做过类似的,几乎一样,没怎么改就拿过来了,很简单

...

转载请注明原文地址: https://www.6miu.com/read-2629690.html

最新回复(0)