解析
由于本题数据量较小,考虑直接用dfs解决,根据题意可得,若要把矩形切n-1次使之体积相等的块,考虑对每个x/n与y/n 进行枚举,dfs返回当前的矩形的最小的最大边长比即可
#include <bits/stdc++.h>
#define inf 1000000007
#define eps 0.000001
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=100005;
double seg=0;
double dfs(double x,double y,double n)
{
if(n==1){
return max(x,y)/min(x,y);
}
double rate=inf;
for(double i=1;i<=n/2;i++){//此处应定要加上等于,不然对半分时会遍历不到
rate=min(rate,max(dfs(i*(seg/y),y,i),dfs((n-i)*(seg/y),y,n-i)));
}
for(double j=1;j<=n/2;j++){
rate=min(rate,max(dfs(x,j*(seg/x),j),dfs(x,(n-j)*(seg/x),n-j)));
}
return rate;
}
int main()
{
double x, y, n;
scanf("%lf%lf%lf",&x,&y,&n);
seg=x*y/n;
double z=dfs(x,y,n);
printf("%.6f",z);
return 0;
}