SCOI2009生日蛋糕
2015-07-27 22:08
260 查看
1024: [SCOI2009]生日快乐
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1741 Solved: 1231
[Submit][Status][Discuss]
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 。
题解:
使用dfs进行搜索。
每次枚举横向切和竖向切。(注意每份蛋糕的大小相同)
注意r的用法。
还有double储存除法的结果时,若被除数和除数都是整数类型时,返回的也是整数类型。即double x1=1/5,x2=1.0/5;前者返回的是0,后者返回的是0.2。
附上clj的代码:
#include<iostream> #include<cstdio> using namespace std; double dfs(double x,double y,int c) { if(x>y)swap(x,y); if(c==1)return y/x; double ret=1e20,r=1.0/c; for(int i=1;i<c;i++) { ret=min(ret,max(dfs(x*r*i,y,i),dfs(x-x*r*i,y,c-i))); ret=min(ret,max(dfs(x,y*r*i,i),dfs(x,y-y*r*i,c-i))); } return ret; } int main() { double x,y;int n; scanf("%lf%lf%d",&x,&y,&n); printf("%0.6lf\n",dfs(x,y,n)); }
相关文章推荐
- 在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案
- 第一百一十六天 how can I 坚持
- Android(java)学习笔记134:Handler用法总结和秒表案例
- error: variably modified 'table' at file scope
- Xmanager4使用记录
- shell脚本:shell的基本元素-6 重定向与管道
- 要成为linux网站运维工程师必须要掌握的技能
- 要成为linux网站运维工程师必须要掌握的技能
- JavaScript学习笔记2:JavaScript基本概念
- VS2012安装VA之后菜单栏中没有VASSISTX
- Android如何实现模糊的半透明窗口
- 数字三角形
- 使用ListView显示信息列表
- 抓交通肇事犯
- FuzzyAutocompletePlugin代码自动实例工具
- Gradient Boosted Regression
- 图片
- ActionBar 兼容低版本 时 v7jar包的导入使用指南和资源
- objective-C 类别/协议。
- oracle中INSTR函数的用法