蓝桥杯python组——真题练习-技能升级

一、问题描述

小蓝最近在玩一款RPG游戏,他的角色一共有N个可以加攻击力的技能,其中第i个技能首次升级可以提升Ai点攻击力,以后每次升级增加的点数都会减少Bi。在Ai/Bi 的上取整次后,再升级该技能将不会改变攻击力

现在小蓝可以总计升级M次技能,它可以任意选择升级的技能和次数,请计算小蓝最多可以提高多少点攻击力?

二、输入输出格式

输入第一行包含两个整数N和M
一下N行每行包含两个整数Ai和Bi

输出一行包含一个整数表示答案

样例输入:

3 6

10 5

9 2

8 1

样例输出:

47

三、题目分析及思路

字有点潦草哈哈,整体思路:

① 求出每个技能所有能加的点数
② 将它们放在一个列表中按从大到小排序
③ 取出前M大的元素进行求和

四、代码

import math
# 接收输入
N, M = map(int, input().split())
score = []
for i in range(N):
    score.append([int(j) for j in input().split()])
    # 接收每个技能对应的点数
# print(score)   # [[10, 5], [9, 2]]

# 接下来要计算每个技能所有能升级的点数情况
"""
比如:A1=10,B1=5
n = 1:   +A1=+10
n = 2:   +(A1-B1)=+5
有一个特点:每个技能加的点数都是降序排列
"""
# 生成一个列表存放所有的点数,只需一维列表即可,因为我们只需要求出最大升级点数,不用知道是哪个技能升级的
res = []
for i in range(N):
    # 遍历所有技能
    max_n = math.ceil(score[i][0] / score[i][1])   # 每个技能能升级的最大次数为Ai/Bi的上取整
    s = 0   # s用来暂时存放每次升级的分数
    for n in range(max_n):
        s = score[i][0] - n*score[i][1]
        res.append(s)
res.sort(reverse=True)   # 对列表进行降序
print(res)
# 最后取前M个进行相加
max_score = 0   # 存放最终结果
for i in range(M):
    max_score += res[i]
print(max_score)

 

如果哪里有问题,还请小伙伴们帮忙指正。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TWAS@py

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值