【题意】给了一个x*y的矩形蛋糕,要你砍cnt-1刀,使得每一块都相等,并且使得长边与短边的比值的最大值最小!
【分析】开始不知道怎么做,以为要二分答案来着,看了一眼题解。卧槽,直接暴力枚举每一个分的位置,当蛋糕剩余cnt为1时直接返回!
【AC代码】
#include <bits/stdc++.h> using namespace std; const double inf = 0x3f3f3f3f; int n,m,cut; double dfs(double x,double y,int cnt){//当前矩形长度为x,宽度为y,切cnt刀 if(cnt==1){ return max(x/y,y/x); } double ret = inf; for(int i=1; i<=(cnt>>1); i++){ ret = min(ret,max(dfs(x/cnt*i,y,i),dfs(x/cnt*(cnt-i),y,cnt-i))); ret = min(ret,max(dfs(x,y/cnt*i,i),dfs(x,y/cnt*(cnt-i),cnt-i))); } return ret; } int main(){ scanf("%d%d%d",&n,&m,&cut); printf("%.6f\n",dfs(n,m,cut)); return 0; }