BZOJ1024 SCOI2009生日快樂

1024: [SCOI2009]生日快樂

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 1846  Solved: 1315
[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 5

Sample Output

1.800000

HINT

【數據規模和約定】

100%的數據,滿足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。


衆所周知這題是個水題,但是爲什麼蒟蒻的我做了半個小時呢?因爲這句話“並且必須把這塊蛋糕切成兩塊”,果然看題仔細是成功的第一步。做法就是爆搜呢。代碼如下:

<span style="font-size:14px;">/**************************************************************
    Problem: 1024
    User: duyixian
    Language: C++
    Result: Accepted
    Time:224 ms
    Memory:1272 kb
****************************************************************/
 
/* 
* @Author: 逸閒
* @Date:   2015-10-01 11:26:44
* @Last Modified by:   逸閒
* @Last Modified time: 2015-10-01 11:41:43
*/
 
#include "cstdio"
#include "cstdlib"
#include "iostream"
#include "algorithm"
#include "cstring"
#include "queue"
 
using namespace std;
 
#define INF 0x3F3F3F3F
#define MAX_SIZE 
#define Eps 
#define Mod 
 
inline int Get_Int()
{
    int Num = 0;
    char ch;
    do
        ch = getchar();
    while(ch < '0' || ch > '9');
    do
    {
        Num = Num * 10 + ch - '0';
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9');
    return Num;
}
 
int N, X, Y;
 
double DFS(double X, double Y, int N)
{
    if(N == 1)
        return max(X, Y) / min(X, Y);
    double Ans = INF;
    for(int i = 1; i < N; ++i)
    {
        Ans = min(Ans, max(DFS(X, Y * i / N, i), DFS(X, Y * (N - i) / N, N - i)));
        Ans = min(Ans, max(DFS(X * i / N, Y, i), DFS(X * (N - i) / N, Y, N - i)));
    }
    return Ans;
}
 
int main()
{
    cin >> X >> Y >> N;
    printf("%.6lf\n", DFS(X, Y, N));
    return 0;
}</span>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章