題意:
一所學校裡有一些班級,每個班級裡有一些學生,現在每個班都會進行一場期末考試。
給你乙個二維陣列 classes ,其中 classes[i]
=[passi, totali] ,
表示你提前知道了第 i 個班級總共有 totali 個學生,其中只有 passi 個學生可以通過考試。
給你乙個整數 extrastudents ,表示額外有 extrastudents 個聰明的學生,他們 一定 能通過任何班級的期末考。
你需要給這 extrastudents 個學生每人都安排乙個班級,使得 所有 班級的 平均 通過率 最大 。
乙個班級的 通過率 等於這個班級通過考試的學生人數除以這個班級的總人數。
平均通過率 是所有班級的通過率之和除以班級數目。
請你返回在安排這 extrastudents 個學生去對應班級後的 最大 平均通過率。
與標準答案誤差範圍在 1e-5 以內的結果都會視為正確結果。
資料範圍:
1<= classes.length <=
1e5classes[i]
.length ==21
<= passi <= totali <=
1e51
<= extrastudents <=
1e5
解法:因為班級數量是固定的,最大化平均通過率其實就是最大化總通過率.
對於(x,y)
,加乙個學生之後變成(x+
1,y+1)
,通過率的變化量為(x+1)
/(y+1)
-x/y.
用乙個堆存所有二元組(x,y)
,每次貪心地取出變化量最大的出來即可.
原理是每次新增之後,下一次新增的變化量一定會比這次小,所以每次用堆選出變化量最大的.
code:struct pi};
class
solution);
}while
(p--
)double ans=0;
while
(q.size()
) ans/=(
int)e.
size()
;return ans;}}
;
LeetCode813 最大平均值和的分組
我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。示例 輸入 a 9,1,2,3,9 k 3 輸出 20 解釋 a 的最優分組是 9 1,2,3 ...
LeetCode 最大平均值和的分組(動態規劃)
我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。示例 輸入 a 9,1,2,3,9 k 3 輸出 20 解釋 a 的最優分組是 9 1,2,3 ...
LeetCode 643 子陣列最大平均數 I
給定n個整數,找出平均數最大且長度為k的連續子陣列,並輸出該最大平均數。示例 1 輸入 1,12,5,6,50,3 k 4 輸出 12.75 解釋 最大平均數 12 5 6 50 4 51 4 12.75 注意 1 k n 30,000。所給資料範圍 10,000,10,000 思路 先求前k個數的...