zoukankan      html  css  js  c++  java
  • [bzoj1024][SCOI2009]生日快乐 (枚举)

    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枚举所有的方案更新答案就好了……
     1 /**************************************************************
     2     Problem: 1024
     3     User: AsmDef
     4     Language: C++
     5     Result: Accepted
     6     Time:16 ms
     7     Memory:804 kb
     8 ****************************************************************/
     9  
    10 /***********************************************************************/
    11 /**********************By Asm.Def-Wu Jiaxin*****************************/
    12 /***********************************************************************/
    13 #include <cstdio>
    14 #include <cstring>
    15 #include <cstdlib>
    16 #include <ctime>
    17 #include <cctype>
    18 #include <algorithm>
    19 #include <cmath>
    20 using namespace std;
    21 #define SetFile(x) ( freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout) )
    22 #define getc() getchar()
    23 template<class T>inline void getd(T &x){
    24     char ch = getc();bool neg = false;
    25     while(!isdigit(ch) && ch != '-')ch = getc();
    26     if(ch == '-')ch = getc(), neg = true;
    27     x = ch - '0';
    28     while(isdigit(ch = getc()))x = x * 10 - '0' + ch;
    29     if(neg)x = -x;
    30 }
    31 /***********************************************************************/
    32  
    33 double dfs(int N, double L, double S){
    34     if(L < S)swap(L, S);
    35     if(N == 1)return L / S;
    36     double Min = L/S*N, part = 1.0 / N, p;
    37     int i, n = N / 2 - (N & 1 == 0);
    38     for(i = 1;i <= n;++i){
    39         p = part * i * L;
    40         Min = min(Min, max(dfs(i, S, p), dfs(N-i, S, L-p)));
    41         p = part * i * S;
    42         Min = min(Min, max(dfs(i, L, p), dfs(N-i, L, S-p)));
    43     }
    44     if(N & 1 == 0)Min = min(Min, min(dfs(i, S, L / 2), dfs(i, L, S / 2)));
    45     return Min;
    46 }
    47  
    48 inline void work(){
    49     int X, Y, N;
    50     scanf("%d%d%d", &X, &Y, &N);
    51     printf("%.6lf ", dfs(N, X, Y));
    52 }
    53  
    54 int main(){
    55  
    56 #ifdef DEBUG
    57     freopen("test.txt""r", stdin);
    58 #elif !defined ONLINE_JUDGE
    59     SetFile(bzoj_1024);
    60 #endif
    61     work();
    62  
    63 #ifdef DEBUG
    64     printf(" %.2lf sec  ", (double)clock() / CLOCKS_PER_SEC);
    65 #endif
    66     return 0;
    67 }
    68 
    枚举方案
  • 相关阅读:
    小程序云开发学习笔记
    188.gulp创建任务
    187.gulp介绍和安装
    186.npm使用详解
    185.nvm和node.js环境配置
    171.补充-在模板中添加权限控制
    170.分组-group、permission、user的操作
    内置中间件CommonMiddleware
    Django内置的中间件
    144.中间件的原理和定义方式详解
  • 原文地址:https://www.cnblogs.com/Asm-Definer/p/4374007.html
Copyright © 2011-2022 走看看