牛牛爱学习

https://ac.nowcoder.com/acm/problem/205055

二分答案+贪心

思路:想要二分的找到最小需要看的天数的话,其实就应该要求出在一定天数间能获得的最大知识点。贪心策略就是优先看知识点数高的书。所以我们可以先将原序列按知识点从大到小排列,再按照看书天数将书分为不同集合。如:有序列为5,4,3,2,1的书要在2天看完,那么5,4就是每天看的第一本书,3,2就是每天看的第二本书,1就是第一天看的第三本书。

#include
using namespace std;
int n, m, a[1000005];
bool cmp(int a, int b){
	return a>b;
}
bool check(int k){
	long long sum=0;
	for(int i=0; i=m)
		return true;
	else 
		return false;
}
int main()
{
	cin>>n>>m;
	for(int i=0; i>a[i];
	sort(a, a+n, cmp);
	int l=1, r=n;
	int ans=-1;
	while(l<=r){
		int mid=r-(r-l)/2;
		if(check(mid)){
			ans=mid;
			r=mid-1;
		}
		else
			l=mid+1;
	}
	cout< 
 

 

你可能感兴趣的:(牛牛爱学习)