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

    链接

    思路

      好题!

      x,y太大了,直接搜索切在哪里显然会TLE,所以换种方法切。

      由于要求所有的蛋糕必须面积等大,所以在一次切的过程中,不论横切还是竖切,必须切在等分点上,即使切完分成的两份的面积之比 等于 人数之比。

      所以搜索时记录三个变量,蛋糕大小,人数,枚举切的位置。  

      疑惑:开始忘记了m/2,于是就没有输出,感觉也可以输出的吧?

    代码

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<iostream>
     4 
     5 using namespace std;
     6 
     7 double X,Y,n;
     8 
     9 double dfs(double x,double y,int m) {
    10     if (m==1) {
    11         return max(x/y,y/x);
    12     }
    13     double ans = 1e9;
    14     for (int i=1; i<=(m>>1); ++i) { // -
    15         double tx = x*(1.0*i/(1.0*m));
    16         ans = min(ans,max(dfs(tx,y,i),dfs(x-tx,y,m-i)));
    17     }
    18     for (int i=1; i<=(m>>1); ++i) { // -
    19         double ty = y*(1.0*i/(1.0*m));
    20         ans = min(ans,max(dfs(x,ty,i),dfs(x,y-ty,m-i)));
    21     }
    22     return ans;
    23 }
    24 int main() {
    25     cin >> X >> Y >> n;
    26     printf("%.6lf",dfs(X,Y,n));
    27     return 0;
    28 }
  • 相关阅读:
    如何判断栈的增长方向
    时间复杂度
    shell基础part3
    shell基础part2
    shell基础part2
    linux基础part5
    linux基础part4
    linux基础part3
    linux基础part2
    shell基础part1
  • 原文地址:https://www.cnblogs.com/mjtcn/p/8868241.html
Copyright © 2011-2022 走看看