Leetcode 1125. 最小的必要团队 (DAY 68) ---- 动态规划学习期(终于自己做出来一道题了 但是时空复杂度太高)

原题题目

在这里插入图片描述


代码实现(首刷自解 时空复杂度很高)

class Solution {
    
    
public:
    vector<int> smallestSufficientTeam(vector<string>& req_skills, vector<vector<string>>& people) {
    
    
        int strl = req_skills.size(),num_people = people.size(),temp;
        vector<vector<int>> dp(1<<strl);
        vector<int>::iterator p;
        for(int i=0;i<1<<strl;i++)
        {
    
    
            if(dp[i].empty() && i)
                continue;
            for(int k=0;k<num_people;k++)
            {
    
    
                p = find(dp[i].begin(),dp[i].end(),k);
                if(p != dp[i].end())    continue;
                temp = i;
                for(string s1:people[k])
                {
    
    
                    for(int j=0;j<strl;j++)
                    {
    
    
                        if(req_skills[j] == s1)
                        {
    
    
                            temp |= (1<<j);
                            if(dp[temp].empty() || dp[temp].size() > dp[i].size()+1)
                            {
    
    
                                dp[temp] = dp[i];
                                dp[temp].push_back(k);
                            }
                        }
                    }
                }
            }
        }
        return dp[(1<<strl)-1];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_37500516/article/details/115170834