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

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务