structPlayer{intage;intscore;Player(intage,intscore):age(age),score(score){}};classSolution{public:intbestTeamScore(vector<int>&scores,vector<int>&ages){constintn=scores.size();vector<Player>players;// dp[i] := the maximum score of choosing the players[0..i] with the// players[i] being selectedvector<int>dp(n);for(inti=0;i<n;++i)players.emplace_back(ages[i],scores[i]);ranges::sort(players,[](constPlayer&a,constPlayer&b){returna.age==b.age?a.score>b.score:a.age>b.age;});for(inti=0;i<n;++i){// For each player, choose it first.dp[i]=players[i].score;// players[j].age >= players[i].age since we sort in descending order.// So, we only have to check that players[j].score >= players[i].score.for(intj=0;j<i;++j)if(players[j].score>=players[i].score)dp[i]=max(dp[i],dp[j]+players[i].score);}returnranges::max(dp);}};
classSolution{publicintbestTeamScore(int[]scores,int[]ages){recordPlayer(intage,intscore){}finalintn=scores.length;Player[]players=newPlayer[n];// dp[i] := the maximum score of choosing the players[0..i] with the players[i] being selectedint[]dp=newint[n];for(inti=0;i<n;++i)players[i]=newPlayer(ages[i],scores[i]);Arrays.sort(players,(a,b)//->a.age==b.age?Integer.compare(b.score,a.score):Integer.compare(b.age,a.age));for(inti=0;i<n;++i){// For each player, choose it first.dp[i]=players[i].score;// players[j].age >= players[i].age since we sort in descending order.// So, we only have to check that players[j].score >= players[i].score.for(intj=0;j<i;++j)if(players[j].score>=players[i].score)dp[i]=Math.max(dp[i],dp[j]+players[i].score);}returnArrays.stream(dp).max().getAsInt();}}
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π