[17 提高 1] 斯

[17 提高 1] 斯

题意

按题目的要求选出几个人赌,因为硬币只有正反两种情况,取这两种情况盈利的最小值所有方案中的最大值。

尝试1

暴力:先确定和几个人赌,再确定和那几个人,用组合的公式估一下肯定会爆,不能拿全分

尝试2

用动态规划的思想做设数组f[ i ] 到第几个人的最好方案,那么每加入一个人,原先最好的方案加上这个人未必是最好的方案,还是要枚举,所以动态规划也不便捷。

STD

不难发现, 如果我们知道正反面分别和几个庄家下了注,我们下的注一定是收益

最多的几个庄家, 所以我们可以把两组庄家按照收益从大往小排序, 那么每一边的收益一

定是一个前缀和。 这样我们可以通过枚举左右各取了几个, O( N 2 N^2 N2)的计算答案。

考虑加速这个过程,假设较小的收益是第一组庄家的前缀,我们可以从小往大枚举

第一组取的个数,然后在右边找到要超过这个收益,最少要和几个庄家下注,这个可以用一

个指针来扫。 这样我们可以在排完序之后线性时间内做完此题, 复杂度 O(NlogN), 瓶

颈在于排序, 如果采用桶排序可以做到 O(N)

posted @ 2022-09-24 21:16  zyc_xianyu  阅读(5)  评论(0编辑  收藏  举报