貪心 硬幣遊戲

2022-06-18 22:54:14 字數 968 閱讀 7160

一共有\(n\)個莊家。

你可以到莊家那邊下注,每次可以猜大猜小,猜一次需要乙個單位的花費(可以都猜,也可以都不猜,都猜花費\(2\)個單位)。

可以到任意個莊家那裡下賭注。

開彩結果不是大就是小。

如果開彩結果是大,你就可以得到你之前猜大的莊家相應的\(a_i\)單位的收益。

如果開彩結果是小,你就可以得到你之前猜小的莊家相應的\(b_i\)單位的收益。

請你設定乙個策略,使得你在最壞情況下的收益最大。

最壞情況即取開小和開大中結果的最小值。

可以發現,因為可以都下注,就可以把\(a\)和\(b\)分開做。

實際上求得就是這個東西:\(max(min(\sum_a_i,\sum_b_i)-(c(s_1)+c(s_2)))\)(即賭\(c(s_1)\)個小,\(c(s_2)\)個大)

固定\(c(s_1)+c(s_2)\),則求\(min(\sum_a_i,\sum_b_i)\)最大。

如果列舉\(c(s_1)和c(s_2)\),肯定取最大的\(c(s_1)和c(s_2)\)個\(a_i和b_i\)做比較,然而複雜度是\(o(n^2)\)的。

不妨令小的一邊是\(a\),那麼隨著\(a\)增大,相應的\(b\)也應增大。用兩個指標維護即可。對於小的一邊為\(b\),也做一遍即可。此處也是取前若干個最大值,易證。

#include #include int n;

double ans;

double a[100001], b[100001];

bool cmp(double x, double y)

int main()

for (int i = 1, j = 1; i <= n && j <= n; i++)

for (int i = 1, j = 1; i <= n && j <= n; i++)

printf("%.4lf", ans);

}

翻硬幣(貪心)

歷屆試題 翻硬幣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 ...

硬幣問題(貪心)

有1元,5元,10元,50元,100元,500元的硬幣各a1,a5,a10,a50,a100,a500枚,現在要用這些硬幣支付money元,最少需要支付多少硬幣?假定本題至少一種支付方案。分析 要使數量最少,所以要先從面值大的開始選擇,依次往下類推,即可得到最佳答案。優先選擇面值大的。include...

翻硬幣 貪心

問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 如果已知了初始狀態和要達到的目標狀態,每次只能同時翻轉相鄰的兩個硬...