[BZOJ1024][SCOI2009]生日快乐解题报告

Description

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

  最简单的暴搜...枚举这一刀下去分成两边的块数和是横切还是竖切就好了...因为n<=10所以就算这么暴力还是可以过...

 /**************************************************************
Problem: 1024
Author: mjy0724
Time:572 ms
Memory:224 kb
****************************************************************/ program bzoj1024;
var x,y:extended;
p:longint; function max(a,b:extended):extended;
begin
if a>b then exit(a) else exit(b);
end; function min(a,b:extended):extended;
begin
if a<b then exit(a) else exit(b);
end; function dfs(x,y:extended;p:longint):extended;
var ans:extended;
i:longint;
begin
if p= then exit(max(x/y,y/x));
ans:=min(max(dfs(x*/p,y,),dfs(x-x*/p,y,p-)),max(dfs(x,y*/p,),dfs(x,y-y*/p,p-)));
for i:= to p >> do
ans:=min(ans,min(max(dfs(x*i/p,y,i),dfs(x-x*i/p,y,p-i)),max(dfs(x,y*i/p,i),dfs(x,y-y*i/p,p-i))));
exit(ans);
end; begin
readln(x,y,p);
writeln(dfs(x,y,p)::);
end.

  

上一篇:square-and-multiply algorithm


下一篇:读取properties和xml中配置文件的值