51nod 2133 排隊接水 排序
阿新 • • 發佈:2018-11-02
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; }