题目描述:
某云短信厂商,为庆祝国庆,推出充值优惠活动。
现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。
输入描述:
第一行客户预算M,其中 0<=M<=1000000
第二行给出售价表,P1,P2...Pn, 其中 1<=n<=100,Pi为充值i元获得的短信条数。 1<=Pi<=1000, 1<=n<=100
输出描述:
最多获得的短信条数
示例1
输入:
6
10 20 30 40 60
输出:
70
说明:
分两次充值最优,1元、5元各充一次。总条数 10+60=70
示例2
输入:
15
10 20 30 40 60 60 70 80 90 150
输出:
210
说明:
分两次充值最优,10元、5元各充一次。总条数 150+60=210
解题思路:
把所有档次的充值,以每元可获得的短信数为key,价格为value存到字典中,然后对字典排序,确保性价比最高的充值方式在最前。
然后依次遍历各性价比的充值金额列表,优先购买性价比最高的,性价比相同时优先购买最贵的,直到花完钱,然后输出金额
m=int(input())
shoujia=list(map(int,input().split()))
data={}
for i,value in enumerate(shoujia):
ave=value/(i+1)
if data.get(ave)==None:
data[ave]=[i+1]
else:
data[ave].append(i+1)
data=sorted(list(data.items()),key=lambda x:x[0],reverse=True)
goumai=[]
for dangci in data:
paixu=sorted(dangci[1],reverse=True)
for jiage in paixu:
if m==0:
break
if jiage<=m:
m-=jiage
goumai.append(jiage)
sum=0
for i in goumai:
sum+=shoujia[i-1]
print(sum)