手机销售网站设计,常熟网站制作找哪家好,wp怎么打开wordpress,wordpress顶部图标不清晰题面 
分析 
如果没有相同的数那么一定是从最后一个开始向前一个个放入集合#xff0c;这样不会损失#xff0c;一旦有相同的#xff0c;从右向左依次放入#xff0c;那么一旦遇到集合里已经有的元素#xff0c;此时最优策略就是将当前这个数减一再放进去#xff0c;那么…题面 
分析 
如果没有相同的数那么一定是从最后一个开始向前一个个放入集合这样不会损失一旦有相同的从右向左依次放入那么一旦遇到集合里已经有的元素此时最优策略就是将当前这个数减一再放进去那么此时我可以将他前面的那个数先放进去然后在放这个数呢么简单来做也就是将数组按照从大到小排序如果遇到相邻相同元素那么就可以将后面这个元素减一同时需要维护保证数组始终单调递减。 
代码 
#include bits/stdc.husing namespace std;
using ll  long long;void solve() {int n;cin  n;vectorll a(n);for(int i  0; i  n; i ) {cin  a[i];a[i]  i  1;}sort(a.begin(), a.end(), greaterll());for(int i  1; i  n ;i ) {if(a[i]  a[i - 1]) a[i]  a[i - 1] - 1;if(a[i]  a[i - 1]) a[i] --;}for(int i  0; i  n; i ) cout  a[i]   ;cout  \n;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin  T;while(T --) {solve();}
}