一定不要想复杂了,虽然他看起来和二分的条件一模一样
切的时候一定是切在等分点上,所以就枚举等分点切就可以了。。
感觉应该有更简单的结论
码:
#include<iostream>
#include<cstdio>
using namespace std;
double x,y;
int n;
double dfs(double x,double y,int ys)
{
if(ys==1)return max(x/y,y/x);
double lin=999999999;int i;
for(i=1;i<ys;i++)
{
lin=min(lin,max(dfs(x/ys*i,y,i),dfs(x/ys*(ys-i),y,ys-i)));
lin=min(lin,max(dfs(x,y/ys*i,i),dfs(x,y/ys*(ys-i),ys-i)));
}
return lin;
}
int main()
{
scanf("%lf%lf%d",&x,&y,&n);
printf("%.6lf",dfs(x,y,n));
}