在Python中查找最佳无冲突团队的程序
假设我们有两个列表,称为“分数”和“年龄”,其中 scores[i] 和 ages[i] 表示篮球比赛中第 i 个球员的得分和年龄。我们想选择具有最高总分的团队。团队的得分是团队中所有球员得分的总和。但我们不允许比赛中存在冲突。这里如果较年轻的球员的得分严格高于较年长的球员,则存在冲突。
因此,如果输入为scores = [5,7,9,14,19],ages = [5,6,7,8,9],则输出将为54,因为我们可以选择所有球员。
为了解决这个问题,我们将遵循以下步骤−
- sa :由从 ages 和 scores 中取出元素 a 和 s 组成的对形成的列表
- 对列表 sa 进行排序
- scores :从 sa 制成得分列表
- maxScore :0
- n :分数大小
- dp :长度为n的数组,用0填充
- 对于i在0到n-1的范围内,执行以下操作
- score:scores[i]
- dp[i]: = score
- 对于j在0到i-1的范围内,执行以下操作
- 如果 scores[j] ≤ score,则
- dp[i]:= dp[i] 和 dp[j]+score 的最大值
- maxScore:maxScore 和 dp[i] 的最大值
- 返回 maxScore
示例
让我们看一下以下实现,以更好地理解−
def solve(scores, ages):
sa = [[a,s] for a,s in zip(ages,scores)]
sa.sort()
scores = [s for a,s in sa]
maxScore = 0
n = len(scores)
dp = [0] * n
for i in range(n):
score = scores[i]
dp[i] = score
for j in range(i):
if scores[j] ≤ score:
dp[i] = max(dp[i],dp[j] + score)
maxScore = max(maxScore, dp[i])
return maxScore
scores = [5,7,9,14,19]
ages = [5,6,7,8,9]
print(solve(scores, ages))
输入
[5,7,9,14,19], [5,6,7,8,9]
输出
54