解法一:暴力法
复杂度为O(MN)
import sys
# 升级M次技能,问最多可以提高多少点攻击力,如果每次都提升的攻击力最大,那么总的也是最大
N,M=map(int,input().split())
a=[] #下一次能够提升的攻击力
b=[] # 每次升级减少的点数
c=[] # A/B
for i in range(N):
A,B=map(int,input().split())
a.append(A)
b.append(B)
if A%B==0:
c.append(A//B)
else:
c.append(A//B) # 上取整
count_ = 0
for i in range(M):
max_ = max(a)
index_ = a.index(max_)
if c[index_] == 0:
i = i+1
continue
count_ = count_ + max_
a[index_] = max_ - b[index_]
c[index_] = c[index_] - 1
print(count_)
解法二:暴力法+优先队列
优先队列的复杂度为O(logN),总的复杂度为O(MlogN)
import os
import sys
from heapq import *
# 升级M次技能,问最多可以提高多少点攻击力,如果每次都提升的攻击力最大ÿ