本文共 1653 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到一种方法来计算Roy抢取银行时的最大收益,同时确保逃脱的概率不超过给定的阈值。这个问题类似于0-1背包问题,但带有概率约束。因此,我们需要使用动态规划来解决这个问题。
def main(): import sys input = sys.stdin.read data = input().split() idx = 0 T = int(data[idx]) idx += 1 for _ in range(T): P = float(data[idx]) N = int(data[idx+1]) idx +=2 v = [] w = [] sumM = 0 for _ in range(N): M = int(data[idx]) P_b = float(data[idx+1]) v.append(M) w.append(P_b) sumM += M idx +=2 MAX = sumM dp = [0.0]*(MAX +1) dp[0] = 1.0 for j in range(MAX +1): if dp[j] ==0: continue for i in range(j, -1, -1): if i ==j: idx_j = j + v[i] if idx_j > MAX: continue prob = dp[i] * (1 - w[i]) if prob > dp[idx_j]: dp[idx_j] = prob for i in range(MAX, -1, -1): if dp[i] <= P and dp[i] >=0: print(i) break if __name__ == "__main__": main()
这种方法确保了我们能计算出在不超过给定概率约束下,Roy能获取的最大金额。
转载地址:http://ekrtz.baihongyu.com/