思路:直接根据题意爆搜(dfs)就可以了。
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
double x,y;
int n;
double dfs(double x,double y,int cnt){
if(cnt==1){
if(x<y) swap(x,y); //long / short
return x/y;
}
double minn=10000.0,maxx=0.0;
double xx=x/cnt,yy=y/cnt;
for(int i=1;i<cnt;i++){
maxx=dfs(x-xx*i,y,cnt-i);
maxx=max(maxx,dfs(xx*i,y,i));
minn=min(maxx,minn);
}
for(int i=1;i<cnt;i++){
maxx=dfs(x,y-yy*i,cnt-i);
maxx=max(maxx,dfs(x,yy*i,i));
minn=min(maxx,minn);
}
return minn;
}
int main()
{
scanf("%lf %lf %d",&x,&y,&n);
printf("%.6f\n",dfs(x,y,n));
}
京公网安备 11010502036488号