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

    [BZOJ1024][SCOI2009]生日快乐

    试题描述

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

    输入

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

    输出

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

    输入示例

    5 5 5

    输出示例

    1.800000

    数据规模及约定

    见“输入

    题解

    注意到“每人分到的面积相同”,所以不管横切纵切,总得把对应的长或宽均分成 k 份,然后左右各取。

    于是我们就得到了一个暴力,每次下刀前枚举分成的两部分各占多少块面积,dfs 搜索即可。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <vector>
    using namespace std;
    
    #define oo 1e9
    double x, y;
    int n;
    
    double solve(double x, double y, int n) {
    	if(n == 1) return max(x, y) / min(x, y);
    	double ans = oo;
    	for(int i = 1; i < n; i++) ans = min(ans, max(solve(x / n * i, y, i), solve(x / n * (n - i), y, n - i)));
    	for(int i = 1; i < n; i++) ans = min(ans, max(solve(x, y / n * i, i), solve(x, y / n * (n - i), n - i)));
    	return ans;
    }
    
    int main() {
    	scanf("%lf%lf%d", &x, &y, &n);
    	
    	printf("%.6lf
    ", solve(x, y, n));
    	
    	return 0;
    }
    

    woc 大视野竟然有裸的爆搜。。。

  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/5796626.html
Copyright © 2011-2022 走看看