题意:
给你一个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; }