[BZOJ1024][SCOI2009]生日快乐解题报告
Description
windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?
最简单的暴搜...枚举这一刀下去分成两边的块数和是横切还是竖切就好了...因为n<=10所以就算这么暴力还是可以过...
1 /************************************************************** 2 Problem: 1024 3 Author: mjy0724 4 Time:572 ms 5 Memory:224 kb 6 ****************************************************************/ 7 8 program bzoj1024; 9 var x,y:extended; 10 p:longint; 11 12 function max(a,b:extended):extended; 13 begin 14 if a>b then exit(a) else exit(b); 15 end; 16 17 function min(a,b:extended):extended; 18 begin 19 if a<b then exit(a) else exit(b); 20 end; 21 22 function dfs(x,y:extended;p:longint):extended; 23 var ans:extended; 24 i:longint; 25 begin 26 if p=1 then exit(max(x/y,y/x)); 27 ans:=min(max(dfs(x*1/p,y,1),dfs(x-x*1/p,y,p-1)),max(dfs(x,y*1/p,1),dfs(x,y-y*1/p,p-1))); 28 for i:=1 to p >> 1 do 29 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)))); 30 exit(ans); 31 end; 32 33 begin 34 readln(x,y,p); 35 writeln(dfs(x,y,p):0:6); 36 end.