問題描述
有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1、t2………..tn為整數
且各不相等,應如何安排他們的打水順序才能使他們總共花費的時間最少?
輸入格式
第一行n,r (n<=500,r<=75)
第二行為n個人打水所用的時間ti (ti<=100);
輸出格式
最少的花費時間
樣例輸入
3 21 2 3
樣例輸出
7資料規模和約定
其中80%的資料保證n<=10
思路:優先佇列,花時間越少的先入隊,對陣列按所需時間從小到大排序,先把前r個入隊,後面入隊的並不是所需時間,而是等待時間+所需時間,具體實現就是每出隊乙個,就把這個人所需的時間(下乙個入隊的人的等待時間) + 下乙個入隊的人所需時間,就是總時間,這裡的總時間也是下乙個到這個水龍頭下接水的人的等待時間。這裡入隊的方式很巧妙,並不是直接將元素入隊,而是還要加上等待時間。
**:#include
using namespace std;
const int maxn = 550;
struct node
};priority_queueq;
int n, r, ans;
node p[maxn];
bool cmp(node a, node b)
void clear()
int main()
sort(p, p+n, cmp);
for(int i = 0;i < r;i++)
for(int i = r;i < n;i++)
clear();
cout << ans << endl;
}return 0;
}
藍橋杯 演算法提高VIP 排隊打水問題 貪心
題目描述 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1 t2 tn為整數且各不相等,應如何安排他們的打水順序才能使他們總共花費的時間最少?資料規模和約定 其中80 的資料保證n 10 如下 include define ll long long using namespace std co...
藍橋杯 排隊打水問題
問題描述 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1 t2 tn為整數且各不相等,應如何安排他們的打水順序才能使他們總共花費的時間最少?輸入格式 第一行n,r n 500,r 75 第二行為n個人打水所用的時間ti ti 100 輸出格式 最少的花費時間 樣例輸入 3 21 2 3 樣例...
演算法提高 排隊打水問題
問題描述 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1 t2 tn為整數且各不相等,應如何安排他們的打水順序才能使他們總共花費的時間最少?輸入格式 第一行n,r n 500,r 75 第二行為n個人打水所用的時間ti ti 100 輸出格式 最少的花費時間 樣例輸入 3 21 2 3 樣例...