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]
本文标签: 取数
版权声明:本文标题:取数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1688132045a183053.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论