您的位置:首页 > 其它

1024: [SCOI2009]生日快乐

2018-04-17 22:03 267 查看

链接

思路

  好题!

  x,y太大了,直接搜索切在哪里显然会TLE,所以换种方法切。

  由于要求所有的蛋糕必须面积等大,所以在一次切的过程中,不论横切还是竖切,必须切在等分点上,即使切完分成的两份的面积之比 等于 人数之比。

  所以搜索时记录三个变量,蛋糕大小,人数,枚举切的位置。  

  疑惑:开始忘记了m/2,于是就没有输出,感觉也可以输出的吧?

 

代码

#include<cstdio>
#include<algorithm>
#include<iostream>

using namespace std;

double X,Y,n;

double dfs(double x,double y,int m) {
if (m==1) {
return max(x/y,y/x);
}
double ans = 1e9;
for (int i=1; i<=(m>>1); ++i) { // -
double tx = x*(1.0*i/(1.0*m));
ans = min(ans,max(dfs(tx,y,i),dfs(x-tx,y,m-i)));
}
for (int i=1; i<=(m>>1); ++i) { // -
double ty = y*(1.0*i/(1.0*m));
ans = min(ans,max(dfs(x,ty,i),dfs(x,y-ty,m-i)));
}
return ans;
}
int main() {
cin >> X >> Y >> n;
printf("%.6lf",dfs(X,Y,n));
return 0;
}

 

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