牛客寒假算法基礎集訓營3 - H 處女座的百日理財計劃 大數+dp

題目鏈接

題意:初始資金是1000,一共100天,每天早上可以收回到期的投資資金,中午可以玩老虎機有概率翻倍手頭的資金,晚上可以選擇借給別人錢,問第100天結束之後能獲得的錢的最大期望值。

思路:DPDP ,對於老虎機,由於是翻倍,期望值則是 ans[i]2Q[i]ans[i] * 2 * Q[i] ( ans[i]ans[i] 爲當天手頭上的資金, Q[i]Q[i] 爲當天老虎機翻倍的概率),對於晚上借錢,因爲如果有最優的方案肯定是把所有錢都投進去所獲得期望最大,所以枚舉方案的時候就是把所有錢借出去給同一個人,借錢產生的期望則是 ans[i](100+M[j])(100P[j])//10000ans[i] * (100 + M[j]) * (100 - P[j]) // 10000(產生的期望值爲第 i+D[j]i + D[j] 天的)。由於要取最值且模數是 10000000071000000007 ,所以中途必須得用大數,最後結果取模。

#-*-coding:utf-8 -*-
n = int(input())
D = [0] * 10005
M = D[:]
P = M[:]
ans = [0] * 105
for i in range(n):
    D[i] ,M[i] ,P[i] = map(int , input().split(" "))
Q = [int(i) for i in input().split(" ")]
ans[0] = 1000
for i in range(100):
    if i > 0:
        ans[i] = max(ans[i - 1] , ans[i])#早上回收借給別人到期的資金
    if Q[i] > 50:
        ans[i] = ans[i] * 2 * Q[i] // 100#中午老虎機
    for j in range(n):
        if i + D[j] <= 100:
            ans[i + D[j]] = max(ans[i + D[j]] , ans[i] * (100 + M[j]) * (100 - P[j]) // 10000)#晚上考慮借錢
print(ans[99] % 1000000007)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章