【bzoj1024】【scoi2009】【生日快乐】【搜索】
2015-08-17 10:58
393 查看
Description
windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?Input
包含三个整数,X Y N。Output
包含一个浮点数,保留6位小数。Sample Input
5 5 5Sample Output
1.800000HINT
【数据规模和约定】100%的数据,满足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。
题解:因为n只有10,所以我们直接搜索。保存一下当前蛋糕的大小,以及要把这块蛋糕分成几块。。对于每一种方案,有两种切法。横着切和竖着切。然后我们枚举一下就好了。。
#include<iostream> #include<cstdio> using namespace std; int x,y,n; double dfs(double x,double y,int a) { double ans1,ans2,ans(9999999); if (a==1) { if (x<y) swap(x,y); return x/y; } for (int i=1;i<a;i++) { ans1=max(dfs(x/a*(a-i),y,a-i),dfs(x/a*i,y,i)); ans2=max(dfs(x,y/a*(a-i),a-i),dfs(x,y/a*i,i)); ans=min(ans,min(ans1,ans2)); } return ans; } int main() { scanf("%d%d%d",&x,&y,&n); printf("%.6lf",dfs(x,y,n)); }
相关文章推荐
- ubuntu server 安装 oracle java8
- 【动态规划】最大子序列
- MyEclipse快捷键大全
- TechNet Virtual Labs
- oracle自动执行一个sql文件的脚本
- 关于html的小bug
- Hive-0.13安装
- org.hibernate.NonUniqueObjectException
- win10磁盘工具在哪里?win10磁盘工具整理磁盘碎片图文步骤
- swift 中的 Selector 类型
- HDU4678Mine(博弈+sg)
- php中switch语句用法详解
- 中国电信欢go建立话费话费异常预警(国际)
- 反转单链表
- 命名管道(FIFO)
- SpringMVC实现一个controller写多个方法
- JS实现复制到剪贴板
- 如何区分电压串联负反馈电路和电流串联负反馈电路(转)
- SQL2008定时备份数据库
- mybatis+springMvc