Description
windy的生日到了,为了庆祝生日,他的朋友们帮他买了一 个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?
Input
包含三个整数,X Y N。
Output
包含一个浮点数,保留6位小数。
Sample Input
5 5 5
Sample Output
1.800000
HINT
【数据规模和约定】
100%的数据,满足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。
分析
难得碰到一道水题QAQ 直接用dfs枚举所有的方案更新答案就好了……
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <algorithm>
#include <cmath>
template< x = ch - - }
) - (N & == );
;i <= n;++i){
p = part * i * L;
Min = min(Min, max(dfs(i, S, p), dfs(N-i, S, L-p)));
p = part * i * S;
Min = min(Min, max(dfs(i, L, p), dfs(N-i, L, S-p)));
}
== )Min = min(Min, min(dfs(i, S, L / ), dfs(i, L, S / )));
}
inline scanf( printf( }
#ifdef DEBUG
freopen( SetFile(bzoj_1024);
work();
#ifdef DEBUG
printf( ;
}
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <algorithm>
#include <cmath>
template< x = ch - - }
) - (N & == );
;i <= n;++i){
p = part * i * L;
Min = min(Min, max(dfs(i, S, p), dfs(N-i, S, L-p)));
p = part * i * S;
Min = min(Min, max(dfs(i, L, p), dfs(N-i, L, S-p)));
}
== )Min = min(Min, min(dfs(i, S, L / ), dfs(i, L, S / )));
}
inline scanf( printf( }
#ifdef DEBUG
freopen( SetFile(bzoj_1024);
work();
#ifdef DEBUG
printf( ;
}
枚举方案