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; }