# 1626. Best Team With No Conflicts ###### tags: `Leetcode` `Medium` `Dynamic Programming` Link: https://leetcode.com/problems/best-team-with-no-conflicts/ ## 思路 如果我们把所有player按照年龄排序,会发现我们其实是找increasing scores sequence 也就变成了[0300. Longest Increasing Subsequence](https://hackmd.io/oPc5yL1oRhGtGP8UdRd3_g) 要注意的是**sort的时候不能只按照年龄排 如果年龄一样 还要按照score排** 不然就会出现[7,1]在[4,2]前面 他们两个如果需要直接比较就不会放在同一个group里 但是如果array是[7,1][7,2][4,2]那么算[7,2]的时候会把[7,1]算进去 [7,2]和[4,2]比较的时候会把[7,2]的值加过去 也就变成[7,1]和[4,2]一组了 ## Code ```java= class Solution { public int bestTeamScore(int[] scores, int[] ages) { int n = scores.length; int[][] players = new int[n][2]; for(int i=0; i<n; i++){ players[i] = new int[]{scores[i], ages[i]}; } Arrays.sort(players, new Comparator<int[]>() { public int compare(int[] o1, int[] o2) { if(o1[1]!=o2[1]) return o1[1]-o2[1]; else return o1[0]-o2[0]; } }); int[] dp = new int[n]; dp[0] = players[0][0]; int maxScore = dp[0]; for(int i=1; i<n; i++){ dp[i] = players[i][0]; for(int j=0; j<i; j++){ if(players[j][1]<players[i][1] && players[j][0]>players[i][0]) continue; dp[i] = Math.max(dp[i], dp[j]+players[i][0]); maxScore = Math.max(maxScore, dp[i]); } } return maxScore; } } ```