[SCOI2009]生日快乐 dfs

    科技2024-04-12  87

    题目链接:点此跳转

    题目描述:给一块矩形蛋糕,要求切成等面积的n个矩形,且长宽比的最大值最小。

    解题思路:因为 n 的取值范围是 n<=10 ,所以很容易想到 dfs递归或者是二进制枚举,因为涉及到浮点数,我们这里使用的是dfs,枚举切的每一刀切的位置即可,如果是从宽x开始切的话,这一块为 x / n * i ,另一块就是 x / n * (n-i)

    Code:

    #include<iostream> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=1e5+5; double dfs(double x,double y,int n){ if(n==1) return max(x,y)/min(x,y); double ans=1e9; for(int i=1;i<n;i++){ double tmp1=min(ans,max(dfs(x/n*i,y,i),dfs(x/n*(n-i),y,n-i))); double tmp2=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n-i))); } return ans; } int main(){ int n; double x,y; scanf("%lf%lf%d",&x,&y,&n); // cin>>x>>y>>n; double res=dfs(x,y,n); printf("%.6f\n",res); return 0; }
    Processed: 0.014, SQL: 8