在 Python 中查找最大平均通过率的程序
假设我们有一个班级列表,其中classes[i]代表[pass_i,total_i]分别表示通过第i个班级考试的学生人数和第i个班级的学生总数。我们还有另一个额外的价值。这表明有额外数量的优秀学生保证通过分配给他们的任何班级的考试。我们必须以最大化所有班级平均通过学生人数的方式将每个额外的学生分配到一个班级。一个班级的通过率由将通过的班级学生人数除以该班级学生总数确定。平均通过率是所有类的通过率之和除以类数。在分配额外的学生后,我们必须找到最大可能的平均通过率。
因此,如果输入类似于classes=[[2,3],[4,6],[3,3]],extra=3,那么输出将是0.83809,因为第一堂课多出两个学生并添加一个额外的学生与二等班的比例最大化,所以现在平均值是(4/5+5/7+3/3)/3=0.83809。
示例
让我们看看以下实现以获得更好的理解-
import heapq
def solve(classes, extra):
h = [(a / b - (a + 1) / (b + 1), a, b) for a, b in classes]
heapq.heapify(h)
while extra:
v, a, b = heapq.heappop(h)
a, b = a + 1, b + 1
heapq.heappush(h, (-(a + 1) / (b + 1) + a / b, a, b))
extra -= 1
return sum(a / b for v, a, b in h) / len(h)
classes = [[2,3],[4,6],[3,3]]
extra = 3
print(solve(classes, extra))输入
[[2,3],[4,6],[3,3]], 3输出结果
0
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下