题目: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 ",dfs(x,y,n)); return 0; }