您的位置:首页 > 房产 > 家装 > 新闻发稿114_微信答题小程序制作_真正免费建站_青岛网站

新闻发稿114_微信答题小程序制作_真正免费建站_青岛网站

2025/4/19 16:33:42 来源:https://blog.csdn.net/jiang_wan_/article/details/147143365  浏览:    关键词:新闻发稿114_微信答题小程序制作_真正免费建站_青岛网站
新闻发稿114_微信答题小程序制作_真正免费建站_青岛网站

题目描述

在这里插入图片描述

思路

求最大边长,一开始我看这个题的第一眼,求最值?贪心?dfs?dp?但这些感觉都没有适用的
看了题解,才发现可以二分!二分的使用条件就是求某一范围的某个数,这个范围内的数要有单调性!这个题正好

代码

因为巧克力的大小是固定的,边长越大,则能分割出来的巧克力块越小,要求最大可能边长
求最大边长,即求小于等于,即求右边界,即mid = l + r + 1 >> 1;

#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;
int h[N],w[N];int n, k;
bool check(int x)
{int ans = 0;for(int i = 1; i <= n; i++){ans +=h[i] / x *( w[i]/x);  //取个最小值,表示当前这块巧克力所能分的小朋友}if(ans >= k) //说明可以分return true;return false; //不可以分
}
int main()
{//分巧克力找的是小于等于的,因为左边的都满足,所以套右边界的板子cin >> n>>k;//最大的边长就是巧克力的最小边长int r = 0x3f3f3f3f;for(int i = 1; i <= n; i++){cin >> h[i]>>w[i];r = min(min(h[i],w[i]) ,r);}puts("ok");	int l = 1;//这个数组是单调递增的,边长数//最大边长while(l < r){int mid = l + r + 1 >>1;if(check(mid)){//当前的满足l = mid; //因为条件是有等于的}elser = mid - 1;}cout<<l <<endl;return 0;
}

总结

这个题启发我:
二分也可以用来求最值!但要满足单调性!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com