1. 程式人生 > >51nod 2133 排隊接水 排序

51nod 2133 排隊接水 排序

n個人一起排隊接水,第i個人需要b[i]的時間來接水。

1 <= n <= 1000

0 <= b[i] <= 1000

同時只能有一個人接水,正在接水的人和沒有接水的人都需要等待。

完成接水的人會立刻消失,不會繼續等待。

你可以決定所有人接水的順序,並希望最小化所有人等待時間的總和。

收起

輸入

第一行一個整數n
接下來n行,每行一個整數表示b[i]

輸出

一行一個整數,表示所有人等待時間的總和的最小值

輸入樣例

3
1
2
3

輸出樣例

10

 上課看了一波題意,想了想,是不是個排序啊,抱著必錯的心理寫了一發,結果竟然過了。。。

思路:

就是從小到大排序,然後模擬過程,進行累加。

程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=1005;
int n;
int b[maxn];
int compare (int &a,int &b)
{
    return a<b;
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    sort (b+1,b+n+1,compare);
    int sum=0;
    for (int i=1;i<=n;i++)
    {
        for (int j=i;j>=1;j--)
        {
            sum+=b[j];
        }
    }
    printf("%d\n",sum);
    return 0;
}