假设我们有两个名为分数和年龄的列表,其中分数 [i] 和年龄 [i] 表示篮球比赛中第 i 个球员的分数和年龄。我们要选择总分最高的球队。这里的队伍得分是队伍中所有队员得分的总和。但是我们不允许在游戏中发生冲突。如果年轻玩家的得分严格高于年长玩家,则存在冲突。
因此,如果输入类似于分数 = [5,7,9,14,19],年龄 = [5,6,7,8,9],那么输出将是 54,因为我们可以选择所有玩家。
让我们看看以下实现以获得更好的理解 -
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