【DP】先按照score从小到大排序,score 相同的按照age从小到大排序,dp[i]为当前走到第i个队员时的最大得分,对于当前i寻找[0, i - 1]中age < 当前ages[i]的dp最大值。
class Solution {
public int bestTeamScore(int[] scores, int[] ages) {
int n = scores.length;
int[][] people = new int[n][2];
for (int i = 0; i < n; ++i) {
people[i] = new int[]{scores[i], ages[i]};
}
Arrays.sort(people, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]);
int[] dp = new int[n];
int res = 0;
for (int i = 0; i < n; ++i) {
for (int j = i - 1; j >= 0; --j) {
if (people[j][1] <= people[i][1]) {
dp[i] = Math.max(dp[i], dp[j]);
}
}
dp[i] += people[i][0];
res = Math.max(res, dp[i]);
}
return res;
}
}