leetcode刷穿杂题

单调栈

class Solution {
    
    
public:
    int s[1000010];
    vector<int> arrangeBookshelf(vector<int>& a, int k) {
    
    
        map<int,int>has,sum;
        int n=a.size();
        for(auto x:a)sum[x]++;
        vector<int>ans;
        for(auto x:a){
    
    
            if(has[x]==k){
    
    
                sum[x]--;
                continue;
            }
            while(ans.size()&&ans.back()>x&&sum[ans.back()]>k)sum[ans.back()]--,has[ans.back()]--,ans.pop_back();
            ans.push_back(x),has[x]++;            
        }
        return ans;
    }
};

分治dp

超时代码

class Solution {
    
    
public:
    int k;
    vector<vector<int>> a;
    vector<int>dfs(int l,int r){
    
    
        if(l==r){
    
    
            vector<int>v;
            v.push_back(0);
            for(auto x:a[r])v.push_back(x+v.back());
            while(v.size()<=k)v.push_back(v.back());
            return v;
        }
        int mid=l+r>>1;
        auto L=dfs(l,mid),R=dfs(mid+1,r);
        vector<int>ans(k+1,0);
        for(int i=0;i<=k;i++){
    
    
            for(int j=0;j<=k;j++){
    
    
                if(i+j>k)continue;
                ans[i+j]=max(ans[i+j],L[i]+R[j]);
            }
        }
        return ans;
    }
    int brilliantSurprise(vector<vector<int>>& A, int l) {
    
    
        a=A;
        k=l;
        int n=a.size();
        return dfs(0,n-1)[k];
    }
};

ac代码


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


分治dp


猜你喜欢

转载自blog.csdn.net/supreme567/article/details/129273422
今日推荐