裸搜,每次把剩下的蛋糕分为两部分。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
double s;
double dfs(double x,double y,int n)
{
if(n==1)
{
return max(x/y,y/x);
}
double ans=1e10;
for(int i=1;i<=n/2;i++)
{
double tx=x*i/n,ty=y*i/n;
ans=min(ans,max(dfs(tx,y,i),dfs(x-tx,y,n-i)));
ans=min(ans,max(dfs(x,ty,i),dfs(x,y-ty,n-i)));
}
return ans;
}
int x,y,n;
int main()
{
scanf("%d%d%d",&x,&y,&n);
s=(x*y)/n;
printf("%lf",dfs(x,y,n));
return 0;
}