卧薪尝胆,厚积薄发。
SCOI2009 生日快乐
Date: Thu Aug 02 09:25:39 CST 2018 In Category: NoCategory

Description:

将一个 $x\times y$ 的矩形切成大小相等的 $n$ 块,使长和宽最大的比值最小。
$1\le x,y\le 10^4$ $1\le n \le 10$

Solution:

先计算出每块蛋糕的面积,然后枚举这一刀两边各几块,再分别计算出沿着长切和沿着宽切这条边的长度然后递归去求,最后两边取个 $max$ ,再和 $ans$ 取 $min$ 即可。

Code:


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
double siz;
double dfs(double x,double y,int n)
{
if(n == 1)return max(x / y,y / x);
double ans = 100000000000;
for(int i = 1;i < n;++i)
{
ans = min(ans,max(dfs(x,(double)i * siz / x,i),dfs(x,y - (double)i * siz / x,n - i)));
ans = min(ans,max(dfs((double)i * siz / y,y,i),dfs(x - (double)i * siz / y,y,n - i)));
}
return ans;
}
int main()
{
int x,y,n;
scanf("%d%d%d",&x,&y,&n);
siz = (double)x * (double)y / (double)n;
printf("%.6lf\n",dfs((double)x,(double)y,n));
return 0;
}
In tag: 算法-搜索
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡