题意:

给你一个x*y的矩阵,让你把他用n-1次切割分成n块

要求每一块的长与宽的比值最大的最小

求这个比值(保留6位小数)

题解:

本来想用二分来做

然而n<=10

所以我们可以暴力枚举+贪心

每一次怎么分,分列还是行

当n=1的时候特判边界即可

代码:

#include<bits/stdc++.h> 
using namespace std;  
typedef double db;  
db x,y,n;
db dfs(db x,db y,db d)  
{  
    db ans=1000000007;  
    if (d==1)  
     {  
        if (x<y)swap(x,y);  
        return x/y;  
     }  
    db mx=x/d,my=y/d;  
    db ans1,ans2;  
    for (db i=1;i<=d/2;i+=1.0)  
     {  
        ans1=max(dfs(mx*i,y,i),dfs(x-mx*i,y,d-i));  
        ans2=max(dfs(x,my*i,i),dfs(x,y-my*i,d-i));  
        ans=min(ans,min(ans1,ans2));  
     }  
    return ans;  
}  
int main()  
{  
    scanf("%lf%lf%lf",&x,&y,&n);  
    printf("%.6lf",dfs(x,y,n));  
    return 0;  
}  

 

posted on 2018-02-13 09:52  宣毅鸣  阅读(144)  评论(0编辑  收藏  举报