Python程序:查找无冲突的最佳团队


假设我们有两个列表,分别称为 scores 和 ages,其中 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 := scores 的大小
  • 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

更新于: 2021年10月5日

438 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告