藍橋杯 演算法提高 排隊打水問題

2021-08-19 03:19:44 字數 869 閱讀 9251

問題描述

有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 樣例...