您的位置:首页 > 其它

BZOJ1024: [SCOI2009]生日快乐

2016-06-23 21:54 239 查看
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1024

题目大意:windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy
     ,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。windy主刀,每一切只能平行于一块蛋糕
     的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得
     每块蛋糕看起来漂亮,我们要求 N块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?

题解:注意:重要的事说三遍:相同面积,相同面积,相同面积;于是我就被坑了,首先想到二分,然后不知道怎么验证答案,后来想到一个贪心,是错的。。。。。

   于是默默地重新读题,发现是暴搜就可以了,毕竟数据范围小。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define D double
#define ll long long
#define INF 1e9
using namespace std;
int x,y,n;
ll a,b,c;
D dfs(D x, D y, int cnt)
{
D ans=INF;
if (cnt==1) return max(x/y,y/x);
for (int i=1; i<=(cnt>>1); i++)
{
ans=min(ans,max(dfs(x/cnt*i,y,i),dfs(x/cnt*(cnt-i),y,cnt-i)));
ans=min(ans,max(dfs(x,y/cnt*i,i),dfs(x,y/cnt*(cnt-i),cnt-i)));
}
return ans;
}
int main()
{
scanf("%d%d%d",&x,&y,&n);
D ans=dfs(x,y,n);
printf("%0.6lf",ans);
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: