蓝桥杯2022年第十三届省赛真题-技能升级(中)

题目

题解:暴力

  • 思路:枚举每一个Ai,并一直减去Bi,直到小于零为止,即为该技能所能增加的点数的集合。将每一个选择存进res中,并排序选择前M大的技能点即可 。
a,b=map(int,input().split())
#读入成二维数组
m=[]#存读进来的数据
res=[]#存结果
for i in range(a):
    row=list(map(int,input().split()))
    res.append(row[0])#把刚开始最大的攻击点加入列表
    m.append(row)#读入每行到m

for i in range(a):
    for j in range(m[i][0]//m[i][1]):
        res.append(m[i][0]-m[i][1])#把更新后的攻击点数加入res列表
        m[i][0]=m[i][0]-m[i][1]#每一行的第一个减去第二个元素就是更新后的攻击点数
#排序
res.sort(reverse=True)#对列表按降序排序
s=0
for i in range(b):#对列表的前b个数求和
    s+=res[i]
print(s)
  • 32分

题解:优化

n, m = map(int, input().split())#读入n,m表示n行,升级次数m
res = []#列表
for _ in range(n):#循环每一行
    a, b = map(int, input().split())#读入每一行的两个数
    while a > 0:#当攻击力是大于0时
        res.append(a)#把当前的攻击力加入列表
        a -= b#更新攻击力,下一次加攻击力时要在a的基础上减去b
res.sort(reverse=True)#对列表按降序排序
ans = sum(res[:m])#对列表的前m个数求和
print(ans)

posted @ 2024-03-01 18:57  Frommoon  阅读(86)  评论(0编辑  收藏  举报