题目
题解:暴力
- 思路:枚举每一个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)
题解:优化
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)