藍橋杯 演算法提高 打水問題 邏輯策略 貪心

2021-07-27 04:47:55 字數 1130 閱讀 4789

演算法提高 打水問題

時間限制:1.0s 記憶體限制:512.0mb

提交此題

問題描述

n個人要打水,有m個水龍頭,第i個人打水所需時間為ti,請安排乙個合理的方案使得所有人的等待時間之和盡量小。

輸入格式

第一行兩個正整數n m 接下來一行n個正整數ti。

n,m<=1000,ti<=1000

輸出格式

最小的等待時間之和。(不需要輸出具體的安排方案)

樣例輸入

7 3

3 6 1 4 2 5 7

樣例輸出

11 提示

一種最佳打水方案是,將n個人按照ti從小到大的順序依次分配到m個龍頭打水。

例如樣例中,ti從小到大排序為1,2,3,4,5,6,7,將他們依次分配到3個龍頭,則去龍頭一打水的為1,4,7;去龍頭二打水的為2,5;去第三個龍頭打水的為3,6。

第乙個龍頭打水的人總等待時間 = 0 + 1 + (1 + 4) = 6

第二個龍頭打水的人總等待時間 = 0 + 2 = 2

第三個龍頭打水的人總等待時間 = 0 + 3 = 3

所以總的等待時間 = 6 + 2 + 3 = 11

貪心的策略。

為了讓等待時間最短,所以讓小的先去接水

為了讓總體等待時間最短,所以讓小的去等待時間小的地方接水

這樣 下次在這個水龍頭的接水等待時間最短

#include 

#include

#include

#include

#include

#include

using

namespace

std;

int a[10000];

int d[10000];

int main()

sort(a,a+n);//排序 優先讓小的接水

int sum=0;

for(int i=0;i//排序,讓小的去等待時間最短的地方接水

sum+=d[0];

d[0]+=a[i];//將最小的那個水龍頭加上等待時間

}cout

<}

}

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

2018 3 22 1.打水問題 問題描述 n個人要打水,有m個水龍頭,第i個人打水所需時間為ti,請安排乙個合理的方案使得所有人的等待時間之和盡量小。輸入格式 第一行兩個正整數n m 接下來一行n個正整數ti。n,m 1000,ti 1000 輸出格式 最小的等待時間之和。不需要輸出具體的安排方案...

藍橋杯 ADV 104演算法提高 打水問題

問題描述 n個人要打水,有m個水龍頭,第i個人打水所需時間為ti,請安排乙個合理的方案使得所有人的等待時間之和盡量小。輸入格式 第一行兩個正整數n m 接下來一行n個正整數ti。n,m 1000,ti 1000 輸出格式 最小的等待時間之和。不需要輸出具體的安排方案 樣例輸入 7 33 6 1 4 ...

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

問題描述 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1 t2 tn為整數 且各不相等,應如何安排他們的打水順序才能使他們總共花費的時間最少?輸入格式 第一行n,r n 500,r 75 第二行為n個人打水所用的時間ti ti 100 輸出格式 最少的花費時間 樣例輸入 3 21 2 3 樣...