本文共 1387 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到一种方法来放置k条鱼,使得随机放置r×r的网时,平均捕捉到的鱼的数量尽可能高。通过分析,我们发现每条鱼被捕捉的概率取决于它所在位置的覆盖次数。我们需要找到覆盖次数最多的位置,并将鱼尽可能集中在这些位置,以最大化期望值。
n, m, r, k = map(int, input().split())if r > n or r > m: print("0.0000000000") exit()T = (n - r + 1) * (m - r + 1)if T == 0: print("0.0000000000") exit()coverages = []for x in range(1, n + 1): for y in range(1, m + 1): # 计算x轴的覆盖次数 cx_low = max(1, x - r + 1) cx_high = min(n - r + 1, x) if cx_low > cx_high: cx = 0 else: cx = cx_high - cx_low + 1 # 计算y轴的覆盖次数 cy_low = max(1, y - r + 1) cy_high = min(m - r + 1, y) if cy_low > cy_high: cy = 0 else: cy = cy_high - cy_low + 1 coverage = cx * cy if coverage == 0: continue coverages.append(coverage)# 按覆盖次数从大到小排序coverages.sort(reverse=True)# 取前k个最大的覆盖次数sum_c = sum(coverages[:k])# 计算期望值E = sum_c / Tprint("{0:.12f}".format(E)) 这种方法通过贪心算法,确保我们总是选择覆盖次数最大的位置,从而最大化期望值。
转载地址:http://pgziz.baihongyu.com/