1. 程式人生 > >【題解】排隊接水

【題解】排隊接水

題解 opened name 順序 include one src ++ 技術分享

題目描述

  有N個人排隊到M個水龍頭去打水,他們裝滿水桶的時間T1,T2,...,Tn為整數且各不相等,應如何安排他們的打水順序才能使他們花費的總時間最少?

輸入格式

  第一行,兩個整數n和m,n表示人的個數,m表示水龍頭的個數;

  第二行,n個數,分別表示n個人裝水的時間;

輸出格式

  一行,一個整數,表示總花費的最少時間。

輸入樣例

6 2

5 4 6 2 1 7

輸出樣例

40

題解

  我們開一個數組維護$m$個水龍頭當前的打水等待時間,每次選時間最小的打水即可。

技術分享圖片
#include <iostream>
#include 
<algorithm> using namespace std; int n, m; int a[1005]; int s[1005]; int ans; int main() { cin >> n >> m; for(register int i = 1; i <= n; ++i) { cin >> a[i]; } sort(a + 1, a + n + 1); s[0] = 214743647; int pos; for(register int
i = 1; i <= n; ++i) { pos = 0; for(register int j = 1; j <= m; ++j) { if(s[pos] > s[j]) pos = j; } s[pos] += a[i]; ans += s[pos]; } cout << ans; return 0; }
參考程序

【題解】排隊接水