搜索
。。。大家都说这是水题。。。我没做出来。。。因为我以为分割不一定要等分
事实上每次切割都要分成当前需要块数的整数倍,比如说需要分成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\n", dfs(x, y, n)); return 0; }
时间: 2024-10-10 04:35:30