题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1024
可以枚举这边放多少块、那边放多少块。
注意精度。不要每次用x*y/base算有多少块,传参较好。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define db double using namespace std; const int N=15; const db INF=1005; db n,x,y,base,ans; db dfs(db x,db y,int k) {if(k==1)return max(x,y)/min(x,y);db ret=INF;for(int i=1;i<k;i++){db l=i*base/y;ret=min(ret,max(dfs(l,y,i),dfs(x-l,y,k-i)));l=i*base/x;ret=min(ret,max(dfs(x,l,i),dfs(x,y-l,k-i)));}return ret; } int main() {scanf("%lf%lf%lf",&x,&y,&n);base=x*y/n;printf("%.6lf\n",dfs(x,y,n));return 0; }