程序以查找我们可以通过完成一些python作业而获得的最大信用
假设我们有两个大小相同的列表,它们是截止日期和学分,它们表示课程分配。截止期限[i]表示分配i的截止日期,而功劳[i]表示分配i所获得的积分的数量。我们有一天可以完成任务,可以在截止日期之前或当天完成。我们不能同时分配多个作业。我们必须找到通过完成某些作业子集可以获得的最大信用。
因此,如果输入像截止日期= [1、2、2、2]个信用= [4、5、6、7],那么输出将是18,因为我们可以在第0天用信用5完成分配第1天以6学分分配作业,第3天以7学分完成分配作业。
为了解决这个问题,我们将遵循以下步骤-
a:=制作一对截止日期和积分,并根据积分的降序对它们进行排序
如果a为空,则
返回0
res:=大小列表(1 +截止日期的最大值)并用0填充
回答:= 0
对于a中的每个对(i,j)
如果res [k]为0,则
res [k]:= 1
ans:= ans + j
从循环中出来
对于范围i中的k降低到0,减少1,
返回ans
让我们看下面的实现以更好地理解-
例
class Solution:def solve(self, deadlines, credits):
a = sorted(list(zip(deadlines, credits)), key=lambda x: x[1], reverse=True)
if not a:
return 0
res = [0] * (max(deadlines) + 1)
ans = 0
for i, j in a:
for k in range(i, -1, -1):
if not res[k]:
res[k] = 1
ans += j
break
return ans
ob = Solution()deadlines = [1, 2, 2, 2]
credits = [4, 5, 6, 7]
print(ob.solve(deadlines, credits))
输入值
[1, 2, 2, 2], [4, 5, 6, 7]
输出结果
18
以上是 程序以查找我们可以通过完成一些python作业而获得的最大信用 的全部内容, 来源链接: utcz.com/z/330812.html