无矛盾的最佳球队 - C++力扣1626题

题目链接:https://leetcode.com/problems/best-team-with-no-conflicts/description/

解题思路

其实看到这种题目已经可以直接往 DP 上面想了,这题就是中等难度,但是只需要关注一下题目给定的条件基本上就有思路了。

首先我们先来对年龄来排序一下,以便我们之后进行计算。之后我们只需要从头开始遍历,因为已经根据年龄进行排序,所以这里我们只需要检查分数即可,因为比较前面的一定是年龄较小的,所以只要现在的分数比前面的分数低的,那是一律不符合条件的。最后就是更新一下 DP 数组并且找最大值就行了。

完整代码:

class Solution {
public:
    int bestTeamScore(vector<int>& scores, vector<int>& ages) {
        vector<pair<int, int>> players;
        int dp[1005], ans = 0;
        for(int i = 0; i < scores.size(); i++) players.push_back({ages[i], scores[i]});
        sort(players.begin(), players.end());

        for(int i = 0; i < players.size(); i++) {
            dp[i] = players[i].second;
            for(int j = 0; j < i; j++) {
                if(players[j].second <= players[i].second) dp[i] = max(dp[i], dp[j] + players[i].second);
            }
            ans = max(ans, dp[i]);
        }

        return ans;
    }
};