• 【BZOJ】1024: [SCOI2009]生日快乐(dfs)


    http://www.lydsy.com/JudgeOnline/problem.php?id=1024

    果然现在弱到连搜索都不会了么。。。。。

    一直想二分。。。但是无论如何也推不出怎么划分。。。

    QAQ

    然后暴力搜索每一次割的时候左边右边各有几块或者上边下边各有几块就行了QAQ

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <set>
    #include <map>
    using namespace std;
    typedef long long ll;
    #define pii pair<int, int>
    #define mkpii make_pair<int, int>
    #define pdi pair<double, int>
    #define mkpdi make_pair<double, int>
    #define pli pair<ll, int>
    #define mkpli make_pair<ll, int>
    #define rep(i, n) for(int i=0; i<(n); ++i)
    #define for1(i,a,n) for(int i=(a);i<=(n);++i)
    #define for2(i,a,n) for(int i=(a);i<(n);++i)
    #define for3(i,a,n) for(int i=(a);i>=(n);--i)
    #define for4(i,a,n) for(int i=(a);i>(n);--i)
    #define CC(i,a) memset(i,a,sizeof(i))
    #define read(a) a=getint()
    #define print(a) printf("%d", a)
    #define dbg(x) cout << (#x) << " = " << (x) << endl
    #define error(x) (!(x)?puts("error"):0)
    #define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
    #define printarr1(a, b) for1(_, 1, b) cout << a[_] << '	'; cout << endl
    inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
    
    double dfs(double x, double y, int n) {
    	if(n==1) return max(y/x, x/y);
    	double ret=1e99;
    	for1(i, 1, n>>1) {
    		ret=min(ret, max(dfs(x/n*i, y, i), dfs(x/n*(n-i), y, n-i)));
    		ret=min(ret, max(dfs(x, y/n*i, i), dfs(x, y/n*(n-i), n-i)));
    	}
    	return ret;
    }
    
    int main() {
    	int x=getint(), y=getint(), n=getint();
    	printf("%.6f", dfs(x, y, n));
    	return 0;
    }
    

      


    Description

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

    Input

    包含三个整数,X Y N。

    Output

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

    Sample Input

    5 5 5

    Sample Output

    1.800000

    HINT

    【数据规模和约定】 

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

    Source

  • 相关阅读:
    6.html5分组元素
    STL基础--算法(修改数据的算法)
    STL基础--算法(不修改数据的算法)
    STL基础--仿函数(函数对象)
    STL基础--迭代器和算法
    STL基础--容器
    STL基础--基本介绍
    C++11--Tuple类<tuple>
    C++11--随机数引擎和随机数分布<random>
    C++11--时钟和计时器<chrono>
  • 原文地址:https://www.cnblogs.com/iwtwiioi/p/4103340.html
Copyright © 2020-2023  润新知