zoukankan      html  css  js  c++  java
  • bzoj1024

    搜索

    。。。大家都说这是水题。。。我没做出来。。。因为我以为分割不一定要等分

    事实上每次切割都要分成当前需要块数的整数倍,比如说需要分成k块,那么肯定只能在k,2k,3k这里切,否则两边不成整数比,因为我们要把当前分成k块,所以只能这样切,然后就好做了,枚举分割点,横着竖着爆搜。

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    double size, x, y;
    double dfs(double x, double y, int k)
    {
        if(k == 1)
        {
            if(x < y) swap(x, y);
            return x / y;
        }
        double ret = 1e9;
        for(int i = 1; i <= k / 2; ++i)
        {
            double tmp_x = x * (double)i / (double)k;
            ret = min(ret, max(dfs(tmp_x, y, i), dfs(x - tmp_x, y, k - i)));    
        }
        for(int i = 1; i <= k / 2; ++i)
        {
            double tmp_y = y * (double)i / (double)k;
            ret = min(ret, max(dfs(x, tmp_y, i), dfs(x, y - tmp_y, k - i)));
        }
        return ret;
    }
    int main()
    {
        scanf("%lf%lf%d", &x, &y, &n);
        printf("%.6f
    ", dfs(x, y, n));
        return 0;
    }
    View Code
  • 相关阅读:
    快速排序
    fedora 配置
    while与do while
    switch选择结构
    if选择结构
    java有参
    java猜拳
    java类的无参方法
    java类与对象
    java数组
  • 原文地址:https://www.cnblogs.com/19992147orz/p/7364538.html
Copyright © 2011-2022 走看看