题目大意:给定一个x*y的矩形,切n-1刀分成n块大小相同的块,只能平行于边界切,求长宽比最大值最小化
题解:看上去是二分……但是暴力就能过了。
用dfs(x,y,d)表示宽x长y矩形需要分成d块的答案。为了保证面积相等,每次都使切的两块面积成比例,然后横竖切
我的收获:暴力!暴力!
#include <iostream>
#include <cstdio>
using namespace std;
double x,y;
int n;
void updata(double &x,double y){if(x>y) x=y;}
double dfs(double x,double y,int cnt)
{
if(cnt==1) return max(y/x,x/y);
double ans=100000.0;
for(int i=1;i<=(cnt>>1);i++){//枚举两块面积比
updata(ans,max(dfs(x*i/cnt,y,i),dfs(x-(x*i/cnt),y,cnt-i)));
updata(ans,max(dfs(x,y*i/cnt,i),dfs(x,y-(y*i/cnt),cnt-i)));
}
return ans;
}
int main()
{
cin>>x>>y>>n;
printf("%.6lf\n",dfs(x,y,n));
return 0;
}