• BZOJ-1024-[SCOI2009]生日快乐


    Description

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

    Input

      包含三个整数,X Y N。1 <= X,Y <= 10000 ; 1 <= N <= 10

    Output

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

    Sample Input

    5 5 5

    Sample Output

    1.800000

     

    题解

    这道题可以用dfs来做

    因为切只能平行于两边,所以我们想到横着切和竖着切的情况

    我们枚举一边切i次,另一边就切k-i次,因为切出来的面积要相同,所以切开来的那条边的长度可以算出来的

    然后在dfs的时候分一下横的和竖的的情况就可以了

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 double x,y;
     4 int n;
     5 double dfs(double x,double y,int k){
     6     if (k==1) return max(x,y)/min(x,y);
     7     double ans=100000.0;
     8     for (int i=1;i<k;i++)
     9         ans=min(ans,max(dfs(x,y*i/k,i),dfs(x,y*(k-i)/k,k-i)));
    10     for (int i=1;i<k;i++)
    11         ans=min(ans,max(dfs(x*i/k,y,i),dfs(x*(k-i)/k,y,k-i)));
    12     return ans;
    13 }
    14 int main(){
    15     scanf("%lf%lf%d",&x,&y,&n);
    16     printf("%.6lf
    ",dfs(x,y,n));
    17     return 0;
    18 }
    View Code
  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/zhuchenrui/p/7629981.html
Copyright © 2020-2023  润新知