二分枚举 +贪心 NOJ 680 摘枇杷

其实就是一到和疯牛一样思路的题目。

每次分下了满足要求的每个组的最大值得最小值就是所以数中的最大值,最大值的最大值就是所有的数的和,此时是装在一个袋子里面的。

如果是枚举的也可以因为数据太水还是可以过的,但是可以用二分,但是每次二分返回的就是你要符合条件的值,还有要注意的是,while(left《=right)是和right=mid-1;

left=mid+1,而while(left

点击打开链接

 #include 
#include 
int a[1005], n, m;
int find(int d)
{int ans=1,cout=0;for(int i =0; id){ans++;cout=a[i];}}if(ans<=m)return 1;return 0;
}
void two(int left ,int right)
{int wid;while(left<=right){wid=(left+right)/2;if(find(wid))right=wid-1;elseleft=wid+1;}printf("%d\n",left);//切记输出wid的时候不一定能满足left但是left能满足
}
int  main()
{while(~scanf("%d%d", &n, &m)){int cout=0,max=-9;for(int i =0; i


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部