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

    题目描述

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

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

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

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

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

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

    输入输出格式

    输入格式:

    三个整数,X Y N。

    输出格式:

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

    输入输出样例

    输入样例#1: 
    5 5 5
    输出样例#1: 
    1.800000

    说明

    100%的数据,满足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。

    这道题第一反应我觉得应该是一个数学题,通过某种玄学gcd来做。

    后来觉得DP也应该可以做。

    最后实在是想不出来觉得还是搜索吧。

    暴搜大法好!

    代码如下:

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 using namespace std;
     5 typedef double dl;
     6 const dl INF = 0x3f3f3f3f;
     7 dl x,y,n;
     8 dl dfs(dl xx,dl yy,dl k)
     9 {
    10   if(k == 1) return max(xx,yy) / min(xx,yy);
    11   dl ans = INF;
    12   for(int i=1; i<k; i++)
    13   {
    14     ans = min(ans, max(dfs(xx, yy/k*i, i),dfs(xx, yy/k*(k-i), k-i)));
    15   }
    16   for(int i=1; i<k; i++)
    17   {
    18     ans = min(ans,max(dfs(xx/k*i,yy,i),dfs(xx/k*(k-i),yy,k-i)));
    19   }
    20   return ans;
    21 }
    22 int main()
    23 {
    24     scanf("%lf%lf%lf",&x,&y,&n);
    25     printf("%.6lf
    ",dfs(x,y,n));
    26     return 0;
    27 }
  • 相关阅读:
    ASP.NET Core WebAPI学习-4
    PIESDKDoNet二次开发配置注意事项
    PIE SDK影像快速拼接
    PIE SDK加载WMS服务数据
    PIE SDK加载自定义服务数据
    PIE SDK 距离分类和最大似然分类
    PIE SDK矢量点生成等值线、面
    PIE SDK与OpenCV结合说明文档
    C#录制声卡声音喇叭声音音箱声音
    C#录制屏幕采集系统桌面画面
  • 原文地址:https://www.cnblogs.com/qmcp/p/9807452.html
Copyright © 2011-2022 走看看