2,459
社区成员
发帖
与我相关
我的任务
分享
Sub f1(B, m1, d)
Sub f2(B, m1, c)
Call f1(B, m1, n \ c1)
Call f2(B, m1 + (n \ c1), n Mod c1)'加上变化的考虑
Sub AssignWork()
'n为待分配的工作量
While n > 0
Call f(B, n)
Wend
End Sub
Sub f(B, n)
m1 = 求最小值(B)
c1 = 求最小值个数(B)
m2 = 求次小值(B)
If 不存在m2 Then '已经全部拉平
Call f1(B, m1, n \ c1)
Call f2(B, m1, n Mod c1)
n = 0
ElseIf n >= ((m2 - m1) * c1) Then '可以拉平到 m2
Call f1(B, m1, m2 - m1)
n = n - (m2 - m1) * c1
Else '不够拉平到 m2
Call f1(B, m1, n \ c1)
Call f2(B, m1, n Mod c1)
n = 0
End If
End Sub
Sub f(B, m1, d)
'所有等于 m1 的工作量都加上 d
End Sub
Sub f(B, m1, c)
'前 c 个等于 m1 的工作量都加上 1
End Sub