https://codeforces.com/contest/1118/problem/D1

 

能做完的天数最大不超过n,因为假如每天一杯咖啡,每杯咖啡容量大于1

首先对容量进行从大到小的排序,

sort(num.rbegin(),num.rend());
sort(num.begin(),num.end(),greater<int>());
都可以

然后遍历每一天,当第i天的时候,选出i个容量最大的分配到每一天,如果还没写完,继续选择i个最大的,但是由题意容量需要进行衰减,衰减的量为j/i(也就是把咖啡以i为单位分成了好多组,相当于减去了组号)


 

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    vector<int> num(n);
    for(int i=0;i<n;i++){
        cin>>num[i];
    }    
    sort(num.rbegin(),num.rend());
    for(int i=1;i<=n;i++){
        int sum=0;
        for(int j=0;j<n;j++){
            sum+=max(num[j]-j/i,0);
        }
        if(sum>=m){
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<-1<<endl;
    return 0;
}