生日快乐题解
题解 :
这个题数据范围较小,可以直接尝试枚举所有切割情况。
题目中有要求,将蛋糕分成大小相等的n块,每一次切割的线一定与一条边平行。所以首先每一刀有两种切法,与长边平行和与短边平行。为了能够将蛋糕n等分,那么当前这一刀可以是过长边的一个n等分点并与短边平行,或过短边的一个n等分点与长边平行。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX_N=2e6+20;
const int INF=0x3f3f3f3f;
const LL MOD=19260817;
double X,Y;
int N;
double ans;
double dfs(double x,double y,int n){
if(x>y)swap(x,y);
if(n==1){
return y/x;
}
double res=INF;
for(int i=1;i<n;i++){
res=min(res,max(dfs(x/n*i,y,i),dfs(x/n*(n-i),y,n-i)));
res=min(res,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n-i)));
}
return res;
}
int main(){
//ios::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
//freopen("1.in","r",stdin);
scanf("%lf%lf%d",&X,&Y,&N);
ans=dfs(X,Y,N);
printf("%.6f\n",ans);
}

京公网安备 11010502036488号