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

相关推荐

Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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