这种傻逼题竟然想不出怎么做。。。N这么小直接爆搜,dfs(x,y,n)表示x*y要切成n块,然后枚举切下去之后两边各分几块,这里又有切长边和切短边两种。。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,i;
double x,y;
double dfs(double x,double y,int k)
{
if (x>y) swap(x,y);
if (k==1) return y/x;
double ans=99999;
for (int i=1;i<=k/2;i++)
{
ans=min(ans,max(dfs(x,y/k*i,i),dfs(x,y/k*(k-i),k-i)));
ans=min(ans,max(dfs(y,x/k*i,i),dfs(y,x/k*(k-i),k-i)));
}
return ans;
}
int main()
{
scanf("%lf%lf%d",&x,&y,&n);
printf("%.6lf",dfs(x,y,n));
}