bzoj 1024 : [SCOI2009]生日快乐

【题意】给了一个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;
}


你可能感兴趣的:(bzoj 1024 : [SCOI2009]生日快乐)