admin 管理员组

文章数量: 1184232

取数

题目描述:
首先给出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]

本文标签: 取数