【BZOJ1024】[SCOI2009]生日快乐(搜索)

【BZOJ1024】[SCOI2009]生日快乐(搜索)

题面

BZOJ
洛谷

题解

看到这个数据范围就感觉是爆搜。我们爆搜左右分成多少块,这样子左右的面积已知,再枚举一下横着切还是竖着切,这样子就可以算答案了。

#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;
}
posted @ 2018-09-29 09:31  小蒟蒻yyb  阅读(172)  评论(0编辑  收藏  举报