【BZOJ1024】[SCOI2009]生日快乐(搜索)
题面
题解
看到这个数据范围就感觉是爆搜。我们爆搜左右分成多少块,这样子左右的面积已知,再枚举一下横着切还是竖着切,这样子就可以算答案了。
#include<iostream>
#include<cstdio>
using namespace std;
double x,y,n;
double dfs(double x,double y,double n)
{
if(n==1)return max(x/y,y/x);double ret=1e9;
for(int i=1;i<=n/2;++i)
{
double t=i/n;
ret=min(ret,max(dfs(x,y*t,i),dfs(x,y*(1-t),n-i)));
ret=min(ret,max(dfs(x*t,y,i),dfs(x*(1-t),y,n-i)));
}
return ret;
}
int main()
{
cin>>x>>y>>n;
printf("%.6lf\n",dfs(x,y,n));
return 0;
}