从最大战力的那个敌人数开始操作。
我的解法很像填坑,最重要的是设了一个坑pit值,还有经验最大值ans_max。
在战斗前,计算好有多大的坑,就是看将所有可以打的oier经验都升到前面的经验最大值,需要多少个人头,这是差的坑。
然后看这一轮的敌人有多少个,判断能不能填满,填满了就可以将剩余的人头平分,这时可能会余下几个人头不够分。
在战斗后,可参战人数-分不尽的人头=战斗完后新的坑,当然,注意ans_max+=1。
如过判断填不满,那就pit-人头数,这就是战斗完后生成新的坑,这个好在不用管谁具体分到了几个人头,前面不够分的人头也同样不用管,算好坑,加了ans_max就行。
后面依次将不同战力的敌人拿来操作就行了。
我的代码(python):
n=int(input())
a=list(map(int,input().split()))
m=int(input())
b=list(map(int,input().split()))
c=list(map(int,input().split()))
a.sort()
d=[[0,0]]
for i in range(m):
d.append([b[i],c[i]])
d.sort(key=lambda x:x[0])
if a[-1]<d[-1][0]:
print(-1)
exit(0)
#关键准备
pit=0
ans_max=0
selected=[]
for i in range(m,0,-1):
part=d[i]
p=[]
for j in range(len(a)):
if a[j]>=part[0]:
pit+=ans_max
selected.append(a[j])
p.append(j)
p.reverse()
for i in p:
a.pop(i)
if part[1]>=pit:
f=part[1]-pit
l=len(selected)
ans_max+=f//l
if f%l!=0:
ans_max+=1
pit=l-f%l
else:
pit=0
else:
pit-=part[1]
print(ans_max)