有關排序的貪心策略的一種證明思想
阿新 • • 發佈:2019-02-02
spa 復制 sam 因此 思想 一個 strong badge 證明
P1223 排隊接水
題目描述
有n個人在一個水龍頭前排隊接水,假如每個人接水的時間為Ti,請編程找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。
輸入輸出格式
輸入格式:
輸入文件共兩行,第一行為n;第二行分別表示第1個人到第n個人每人的接水時間T1,T2,…,Tn,每個數據之間有1個空格。
輸出格式:
輸出文件有兩行,第一行為一種排隊順序,即1到n的一種排列;第二行為這種排列方案下的平均等待時間(輸出結果精確到小數點後兩位)。
輸入輸出樣例
輸入樣例#1: 復制10 56 12 1 99 1000 234 33 55 99 812輸出樣例#1: 復制
3 2 7 8 1 4 9 6 10 5 291.90
說明
n<=1000
ti<=1e6,不保證ti不重復
當ti重復時,按照輸入順序即可(sort是可以的)
分析:
思考一下可以發現應該按升序輸出。
可以通過比較相鄰兩項交換前後的總開銷變化來證明。
序列1:a1,a2,a3,a4....an
序列2:a1,a3,a2,a4...an
a1,a4...an的等待時間都不變。a2的等待時間多了a3,a3的等待時間少了a2,總時間變化為a3-a2.
當a3>a2時,交換後總時間變多了,因此不應該交換,故應該將序列升序排列。
有關排序的貪心策略的一種證明思想