NC20272 简单dfs

给一块矩形蛋糕,要求切成等面积的n个矩形,且长宽比的最大值最小。
首先题目中的切n-1刀是很自然的,不需要去管,因为每一刀只能把一块切成两块,所以任何分割情况都是合法的。接下来看到n最大是10,那就很可能是指数级或阶乘级的算法,自然想到dfs。怎么搜呢?我们枚举每一刀的位置即可,对于当前矩形假如要把它切成k块,下一刀的取法只有2*(k-1)种方案,取最小的一种即可

#include<bits/stdc++.h>
using namespace std;

double dfs(double x,double y,double k){
    if(k==1){
        return max(x,y)/min(x,y);
    }
    double res=10000;
    for(int i=1;i<k;i++){
        res=min(res,max(dfs(x/k*i,y,i),dfs(x/k*(k-i),y,k-i)));
        res=min(res,max(dfs(x,y/k*i,i),dfs(x,y/k*(k-i),k-i)));
    }
    return res;
}

int main(){
    int n;
    double x,y;
    cin>>x>>y>>n;
    cout<<fixed<<setprecision(6)<<dfs(x,y,n)<<endl;
}
每日一题 文章被收录于专栏

暑期每日一题,尽量日更

全部评论
为啥是 2*(k-1)种方案切成 k 块
点赞 回复 分享
发布于 2020-07-15 15:48

相关推荐

2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
2025-11-22 15:15
门头沟学院 Java
程序员花海:实习太简单了 学历可以的 实习描述应该是先介绍业务 再介绍技术 技术咋推动业务的 做到了啥收益 有没有做实验 实验组和对照组有什么不同 你最后学到了什么 有没有参与处理过线上问题 有没有参与过公司的code review 有没有参与过技术分享 这些都是可以在实习描述中写的 并且实习和项目不一样不会撞车 这个实习经历描述有点太偏项目了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务