处女座的百日理财计划

【题目描述】

处女座为了有更充足的资金和小姐姐一起玩耍,于是就放"高利贷"给小姐姐,一般小姐姐一周就会还钱,而处女座只要10%的利率,这样算下来,如果可以利滚利的话,1元钱经过1年(360天)可以变成51.43元呢,想起来就非常美滋滋哦!

不过总是借钱给小姐姐并不是长远之策,处女座开始了自己的百日理财计划。处女座在第一天的早上可以获得1000元的启动资金。之后在每天的早上,他会回收借给别人的到期的资金;在每天的晚上,他可以把任意整数金额的现金借给别人。对于第i个人,他要借Di天,总利息是Mi%,同时他有Pi%的概率跑路;在每天的中午,他都可以去玩一下老虎机,他可以投入整数的金额,在第i天,他有Qi%的几率让金额翻倍,同时还有1−Qi%的概率输。

现在处女座想知道,按照期望去估算每一次的投入的话,如果他采用最优策略投资,他可以反复将钱借给同一个人(大财主为啥不多奉陪呢),在第100天的晚上,他手上最多会有多少现金。

为了便于计算,处女座手上的现金只能为一个整数,每次投资多出来的小数部分会自动舍去。同时由于结果可能很大,你只需要输出对1,000,000,007取模的结果即可。

【输入描述】

输入数据第一行包含一个整数N,表示愿意找处女座借钱的人数。

接下来N行,每行包括三个整数Di,Mi,Pi,含义如题目描述所示。

最后一行包括100个整数Qi,表示每一天老虎机中奖的概率。

0≤N≤10,000
0≤Pi,Qi≤100
1≤Mi,Di≤100

【输出描述】

一行包括一个整数,表示处女座在第100天的晚上手上最多有的钱数对1,000,000,007取模的结果。

【样例】

示例1

输入
1
99 100 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100

输出
4000
说明
处女座在第一天晚上把1000元借给第1个人,经过99天到了第100天早上收回2000元,并在当天中午玩老虎机使得自己的资金全部翻倍,最终在第100天晚上可以拥有4000元。

思路:

首先需要按照期望来估计收益,根据题意,借钱的收益是 (1+Mi%)*(1-Pi%),老虎机的收益是 2*Qi%

因此,当老虎机的概率 > 50% 一定会去玩,而对于借钱进行 dp 即可,由于收益固定,因此每次都是全部投入的

由于要去 max 且涉及乘法操作,long long 的范围不够,因此需要使用高精来做,最后再进行取模

【源代码】

D=[0]*10001
M=[0]*10001
P=[0]*10001
res=[0]*10001

n=int(input())
for i in range(n):
    D[i],M[i],P[i] = map(int , input().split(" "))
Q=[int(i) for i in input().split(" ")]

res[0]=1000
for i in range(100):
    if i>0:#回收借给别人的资金
        res[i]=max(res[i-1],res[i])
    if Q[i]>50:#老虎机
        res[i]=res[i]*2*Q[i]//100
    for j in range(n):#考虑借钱
        if i+D[j]<=100:
            res[i+D[j]]=max(res[i+D[j]] , res[i]*(100+M[j])*(100-P[j])//10000 )
print(res[99] % 1000000007)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值