zoukankan      html  css  js  c++  java
  • B1024 生日快乐 递归。。。

    bzoj1024叫生日快乐,其实很简单,但是没看出来就很尴尬。。。

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

    代码很短,而且很好理解

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define duke(i,a,n) for(int i = a;i <= n;i++)
    #define lv(i,a,n) for(int i = a;i >= n;i--)
    #define clear(a) memset(a,0,sizeof(a))
    typedef long long ll;
    typedef double db;
    const int INF = 1 << 30;
    template <class T>
    void read(T &x)
    {
        char c;
        int op = 0;
        while(c = getchar(),c > '9' || c < '0')
            if(c == '-') op = 1;
        x = c - '0';
        while(c = getchar(),c >= '0' && c <= '9')
            x = x * 10 + c - '0';
        if(op == 1)
            x = -x;
    }
    db w,s,l;
    int p;
    db solve(db w,db l,int p)
    {
        if(p == 1)
            return max(w,l) / min(w,l);
        double sum = INF;
        for (int i = 1; i <= p / 2; ++i)
            sum = min(sum,min(max(solve(w,l - i * s / w,p - i),solve(w,i * s / w,i)),max(solve(w - i * s / l,l,p - i),solve(i * s / l,l,i))));
        return sum;
    }
    int main()
    {
        scanf("%lf%lf%d",&w,&l,&p);
        s = l * w /(db)p;
        printf("%.6lf",solve(w,l,p));
        return 0;
    }
  • 相关阅读:
    node md5
    Iptables入门教程
    centos 6.5 yum安装lnmp
    SSH日志位置
    【收藏】实战Nginx与PHP(FastCGI)的安装、配置与优化
    读《微博春晚背后的技术故事》笔记
    下载整个网页的方法,包括样式、图片、和js
    【收藏】下载Chrome商店插件的方法,万恶的gwd
    nginx变量
    【收藏】SSH原理与运用
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9490529.html
Copyright © 2011-2022 走看看