蓝桥杯练习题:技能升级 | 三种解法 | 暴力+二分+队列

解法一:暴力法

复杂度为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次技能,问最多可以提高多少点攻击力,如果每次都提升的攻击力最大ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值