Best team with no conflicts
Anonymous User
111

Runs all testcases with no error, but is not accepted as it takes long time. Can someone please give suggestions how to improve the runtime without much change in logic

class Solution {
public:
    vector<vector<int>> dp;
    map<int,int> mp;
	
	//sort by age
    static bool comp(pair<int,int>& a, pair<int,int>& b){
        if(a.first == b.first) return a.second < b.second;
        return a.first < b.first;
    }
    
    int recur(int index, vector<pair<int,int>>& stats,int maxAgeTN, int maxScoreTN){
        if(index >= stats.size()) return 0;
        int a=0,b=0;
        if(dp[mp[maxScoreTN]][maxAgeTN]!=-1) return dp[mp[maxScoreTN]][maxAgeTN];
        if(stats[index].first == maxAgeTN){ //curIdx age == maxAgeTN
            a = stats[index].second + recur(index+1,stats,maxAgeTN, max(maxScoreTN,stats[index].second));
        }
        else if(stats[index].first > maxAgeTN && stats[index].second >= maxScoreTN){
           a = stats[index].second + recur(index+1,stats,stats[index].first,stats[index].second);  
        }
        b = recur(index+1,stats,maxAgeTN,maxScoreTN);
        return dp[mp[maxScoreTN]][maxAgeTN] = max(a,b);
    }
    
    int bestTeamScore(vector<int>& scores, vector<int>& ages) {
        vector<pair<int,int>> stats;
        int index = 0;
        for(int i=0;i<scores.size();i++){
            stats.push_back(make_pair(ages[i],scores[i]));
            mp[scores[i]] = index++;
        }
        dp.resize(1001,vector<int>(1001,-1));
        sort(stats.begin(),stats.end(),comp);
        return recur(0,stats,0,0);
        
    }
};
Comments (0)