因为每一次鲍勃加的时候会加到k - i + 1,而爱丽丝下一次选又必须选小于等于k - i - 1 + 1的元素,所以只要是鲍勃操作过的数爱丽丝一定没办法选,则我们不如就让鲍勃每次都选最小的。
因为最大的数有可能已经超过爱丽丝能够选择的范围,而更小的数更有可能被爱丽丝选择,那么只要鲍勃保证选择最小的数,就能够保证对自己的最优解。
void solve(){
int n;cin >> n;
vector<int>a(n+1);
for(int i = 1;i <= n;i++){
cin >> a[i];
}
int res = 0;
for(int k = 1;k <= n;k++){
multiset<int>s(a.begin() + 1,a.end());
for(int i = 1;i <= k;i++){
auto t = s.upper_bound(k - i + 1);
if(s.begin() == t)break;
s.erase(--t);
if(s.size()){
int now = *s.begin();
s.erase(s.begin());
s.insert(now + k - i + 1);
}
}
if(s.size() + k == n)res = k;
}
cout << res << endl;
}