1 条题解
-
0
自动搬运
来自洛谷,原作者为

浅色调
**搬运于
2025-08-24 21:57:09,当前版本为作者最后更新于2018-05-16 17:51:33,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Solution:
本题不需要多想直接。
首先我们假设当前的矩形长为,宽为,要分出块,那么不难想到分出的一块的长最短为,宽最短为,而且每次切的长度一定是的倍数或的倍数(很好理解,不是倍数就无法保证之后切出至少长的矩形或宽的矩形,可以自行画图)。
于是我们递归搜索,每次切长或者宽,在分出的两块中取比值的最大值,更新最大值的最小值,返回就了。
欢迎来踩博客:five20(蒟蒻写题解不易,转载请注明出处,万分感谢!)
代码:
#include<bits/stdc++.h> #define il inline #define For(i,a,b) for(double (i)=(a);(i)<=(b);(i)++) using namespace std; int n,x,y; il double dfs(double x,double y,int k){ if(k==1){return max(x,y)*1.0/min(x,y);} double ans=233333333,mx=x*1.0/k,my=y*1.0/k,t1,t2; For(i,1,k/2){ t1=max(dfs(mx*i,y,i),dfs(x-mx*i,y,k-i)); t2=max(dfs(x,my*i,i),dfs(x,y-my*i,k-i)); ans=min(ans,min(t1,t2)); } return ans; } int main(){ cin>>x>>y>>n; printf("%.6lf",dfs(x,y,n)); return 0; }
- 1
信息
- ID
- 3117
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者