从大到小排序
如
5 0 -1 -8 -9
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
每次在之前的基础上把前i个累加和加一遍
然后加上第i个
遍历所有取最大即可
class Solution {
public:
int maxSatisfaction(vector<int>& s) {
int n = s.size();
auto cmp = [&](int a,int b){
return a>b;
};
sort(s.begin(),s.end(),cmp);
vector<int> sum(n+1,0);
for(int i=1;i<=n;i++){
sum[i] = sum[i-1] + s[i-1];
}
int ret = 0;
int t=0;
for(int i=0;i<n;i++){
t += sum[i];
t += s[i];
ret =max(t,ret);
}
return ret;
}
};