n个人一起排队接水,第i个人需要a
ii的时间来接水。
接下来n行,每行一个整数表示a iiOutput一行一个整数,表示所有人等待时间的总和的最小值Sample Input
1 <= n <= 1000
1 <= a
ii <= 1000
Input第一行一个整数n
同时只能有一个人接水,正在接水的人和没有接水的人都需要等待。
完成接水的人会立刻消失,不会继续等待。
你可以决定所有人接水的顺序,并希望最小化所有人等待时间的总和。
接下来n行,每行一个整数表示a iiOutput一行一个整数,表示所有人等待时间的总和的最小值Sample Input
3 1 2 3Sample Output
10
想稍微练习一下sort,选了复杂的代码
也不想改了》。。。。。
大概思路就是排一下序再输出
3
1
2
3
总是第一个最小,乘此时的总数。
1*3+2*2+3*1
第一*n+第二*n-1.........
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main() {
int a,n,dex,sum=0;
int arr[1010];
scanf("%d",&n);
dex=n;
while(n--)
{
scanf("%d",&arr[n]);
}
sort(arr,arr+dex,cmp);
while(dex--)
{
sum+=(arr[dex]*(dex+1));
}
printf("%d",sum);
return 0;
}