bzoj1024 [SCOI2009]生日快乐 结论+dfs

一定不要想复杂了,虽然他看起来和二分的条件一模一样

切的时候一定是切在等分点上,所以就枚举等分点切就可以了。。

感觉应该有更简单的结论


码:

#include<iostream>
#include<cstdio>
using namespace std;
double x,y;
int n;
double dfs(double x,double y,int ys)
{
	if(ys==1)return max(x/y,y/x);
	double lin=999999999;int i;
	for(i=1;i<ys;i++)
	{
		lin=min(lin,max(dfs(x/ys*i,y,i),dfs(x/ys*(ys-i),y,ys-i)));
		lin=min(lin,max(dfs(x,y/ys*i,i),dfs(x,y/ys*(ys-i),ys-i)));	
	}	
	return lin;
} 
int main()
{
	scanf("%lf%lf%d",&x,&y,&n);
	printf("%.6lf",dfs(x,y,n));
}

猜你喜欢

转载自blog.csdn.net/haobang866/article/details/79354176