zoukankan      html  css  js  c++  java
  • luogu_P4160 [SCOI2009]生日快乐

    https://www.luogu.org/problem/P4160

    题目描述

    windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。

    现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。

    windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。

    这样,要切成 N 块蛋糕,windy必须切 N-1 次。

    为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋糕的长边与短边的比值的最大值最小。

    你能帮助windy求出这个比值么?

    输入格式

    三个整数,X Y N。

    输出格式

    一个浮点数,保留6位小数。


    毒瘤题面,没看到“要求每个人必须获得相同面积的蛋糕“,卡了一小时

    每次横竖分必须都是那个倍数

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    
    #define ri register int
    #define u int
    
    using std::string;
    using std::max;
    using std::min;
    
    namespace all {
    
        u N,M,K;
    
        double dfs(const double &x,const double &y,const u &k) {
            if(k==1) {
                return (double)(max(x,y))/(double)(min(x,y));
            }
            double _re(9999999999.9),mx(x/(double)(k)),my(y/(double)(k));
            for(ri i(1); i<=k/2; ++i) {
                _re=min(_re,max(dfs(mx*i,y,i),dfs(x-mx*i,y,k-i)));
                _re=min(_re,max(dfs(x,my*i,i),dfs(x,y-my*i,k-i)));
            }
            return _re;
        }
    
        inline void solve() {
            std::cin>>N>>M>>K;
            printf("%.6lf",dfs((double)(N),(double)(M),K));
        }
    
    }
    
    int main() {
    
        //freopen("x.txt","r",stdin);
        all::solve();
    
    }
  • 相关阅读:
    C# 編譯錯誤 CS0016 解決方案
    Javascript 日期
    Javascript Url处理
    Linq中in用法
    oracle中的排名函数用法
    webservices [WebServiceBinding(ConformsTo = WsiProfiles.None)]
    C#中的多态
    C# Math类简介 (转)
    客服工单任务系统发展简史 商商
    jQuery LigerUI 使用教程表格篇(2) 服务器数据交互
  • 原文地址:https://www.cnblogs.com/ling-zhi/p/11732879.html
Copyright © 2011-2022 走看看