n个人一起排队接水,第i个人需要b[i]的时间来接水。
1 <= n <= 1000
0 <= b[i] <= 1000
同时只能有一个人接水,正在接水的人和没有接水的人都需要等待。
完成接水的人会立刻消失,不会继续等待。
你可以决定所有人接水的顺序,并希望最小化所有人等待时间的总和。
Input
第一行一个整数n 接下来n行,每行一个整数表示b[i]
Output
一行一个整数,表示所有人等待时间的总和的最小值
Input示例
3 1 2 3
Output示例
10
贪心入门题,要想时间最少,那就要接水时间短的在前,这样后面等待的人花费的时间就少,总时间就最少
总人数为n,第i位接水所花费的时间为(n-i+1)*时间值,因为后面有n-i位在等待接水同样花费同样的时间值
再加上自己一共为n-i+1位
#include<iostream>
#include<algorithm>
using namespace std;
int arr[1010];
int main()
{
int n;
while(cin>>n)
{
int ans=0;
for(int i=1;i<=n;i++)
cin>>arr[i];
sort(arr+1,arr+1+n);
for(int i=1;i<=n;i++)
{
ans=ans+(arr[i]*(n-i+1));
}
cout<<ans<<endl;
}
}