题目描述:
首先给出n个数字a1,a2,….an,然后给你m个回合,每回合你可以从中选择一个数取走它,剩下来的每个数字ai都要减去一个值bi。
如此重复m个回合,所有你拿走的数字之和就是你所得到的分数。
现在给定你a序列和b序列,请你求出最多可以得到多少分。
输入:
5
5
10 20 30 40 50
4 5 6 7 8
输出100
输入第一行,仅包含一个整数n(1<=n<=100),表示数字的个数。
第二行,一个整数m(1<=m<=n),表示回合数。
接下来一行有n个不超过10000的正整数,分别为a1,a2…an.
最后一行有n个不超过500的正整数,分别为b1,b2….bn.
输出
输出仅包含一个正整数,即最多可以得到的分数
def moveNumv2(N, M, numList1: List[int], numList2: List[int]):
"""
:param N: 数字个数
:param M: 回合数
:param numList1:
:param numList2:
:return:
"""
nums = zip(numList1, numList2)
nums = list(nums)
nums.sort(key=lambda x:(x[1], x[0]), reverse=True)
nums.insert(0, (0, 0))
print(nums)
F = np.zeros((N+1, M+1), dtype=np.int)
for i in range(1, N+1):
for j in range(1, M+1):
F[i][j] = max(F[i-1][j-1]+nums[i][0]-(nums[i][1]*(j-1)), F[i-1][j])
return F[N][M]