从最大战力的那个敌人数开始操作。
我的解法很像填坑,最重要的是设了一个坑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)