【二分】【挖金矿】

来源:互联网 发布:c语言中[]是什么意思 编辑:程序博客网 时间:2024/06/10 00:24

Description

这里写图片描述

Input

这里写图片描述

Output

答案,保留4位小数

Sample Input

4 3
4 3 3
5 1 6
2 6 1
3 2 9

Sample Output

4.4286

Data Constraint

n*m<=100000

Solution :
首先看 n*m=100000
那么数据很明显最多支持(mn)logn嘛
然后就考虑二分答案嘛。
因为直接找最优值的话,不知道其他列的情况,二分是最好的选择了~。

然后就是怎么check 答案。
对于当前的一个答案 ans
假设 第i列选了 H[i]个
F[i][j] 表示 第i列选了j个的前缀和。
对于每任意一列i,枚举j
找出 ( ans *H[i])- F[i][H[i]] 的最大值 Max[i]
在把Sum{Max[i]} 和ans比较 即可判断ans是否合法。
问题解决。

0 0
原创粉丝点击