题目链接:点此跳转
题目描述:给一块矩形蛋糕,要求切成等面积的n个矩形,且长宽比的最大值最小。
解题思路:因为 n 的取值范围是 n<=10 ,所以很容易想到 dfs递归或者是二进制枚举,因为涉及到浮点数,我们这里使用的是dfs,枚举切的每一刀切的位置即可,如果是从宽x开始切的话,这一块为 x / n * i ,另一块就是 x / n * (n-i)
Code:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1e5+5;
double dfs(double x,double y,int n){
if(n==1) return max(x,y)/min(x,y);
double ans=1e9;
for(int i=1;i<n;i++){
double tmp1=min(ans,max(dfs(x/n*i,y,i),dfs(x/n*(n-i),y,n-i)));
double tmp2=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n-i)));
}
return ans;
}
int main(){
int n;
double x,y;
scanf("%lf%lf%d",&x,&y,&n);
// cin>>x>>y>>n;
double res=dfs(x,y,n);
printf("%.6f\n",res);
return 0;
}