python可以参加哪些竞赛_找出Python竞赛中可达到的分数的程序

假设我们参加了一场编程竞赛,那里有多个问题,但是当我们解决一个问题时竞赛就结束了。现在,如果我们有两个长度相同的数字列表,称为点和机会。为了说明这一点,在这里针对第i个问题,我们有[i]%的机会可以解决它的点[i]点。我们还有另一个值k,它代表我们可以尝试的问题数量。不能两次尝试相同的问题。

如果我们设计出最佳策略,我们将必须找到比赛中可以得到的分数的期望值,并将其四舍五入为最接近的整数。我们可以将尝试第i个问题的值期望为points [i] *机会[i] / 100.0,这表示我们平均获得的点数。

因此,如果输入是点= [600、400、1000],机会= [10、90、5],k = 2,则输出将是392。

在线示例

让我们看下面的实现以更好地理解-

class Solution:

def solve(self, points, chances, K):

n = len(points)

for i in range(n):

chances[i] /= 100.0

R = sorted(range(n), key=points.__getitem__, reverse=True)

def dp(i, k):

if i == n:

return 0.0

j = R[i]

p = chances[j]

ev = p * points[j]

if k == 1:

return max(ev, dp(i + 1, k))

return max(dp(i + 1, k - 1) * (1 - p) + ev, dp(i + 1, k))

return int(dp(0, K))

ob = Solution()

print (ob.solve([600, 400, 1000], [10, 90, 5], 2))

输入值

[600, 400, 1000], [10, 90, 5], 2输出结果392

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值