单调栈
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