ปัญหา
scores[i], ages[i] คะแนนและอายุผู้เล่น ต้องการทีมคะแนนรวมสูงสุด โดยไม่มีข้อขัดแย้ง: ผู้เล่นอายุน้อยกว่ามีคะแนนสูงกว่าผู้เล่นอายุมากกว่าอย่างเคร่งครัด
ตัวอย่าง
scores=[5,7,9,14,19], ages=[5,6,7,8,9] → 54 (เลือกทุกคนได้เพราะคะแนนเพิ่มตามอายุ)
ขั้นตอนการแก้ปัญหา
sa := list of (age, score)เรียงตามอายุ แล้วคะแนนscores := [s for a,s in sa]- DP:
dp[i]= คะแนนสูงสุดจบที่ i - วน
i0..n-1:dp[i] = scores[i]- วน
j0..i-1: ถ้าscores[j] <= scores[i]:dp[i] = max(dp[i], dp[j] + scores[i]) - อัปเดต
maxScore
- คืน
maxScore
การนำไปใช้งาน (Python)
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