1 条题解

  • 1
    @ 2023-11-2 11:02:51

    暴力 dfs,每次枚举横向切多少刀,分成两个子问题递归即可。纵向同理。

    #include<bits/stdc++.h>
    using namespace std;
    const int inf=0x3f3f3f3f;
    double dfs(double n,double m,int k){
    	if(k==1){
    		if(n<m)swap(n,m);
    		return n/m;
    	}
    	double ans=inf;
    	double tx=n/k,ty=m/k;
    	for(int i=1;i<=k/2;i++){
    		double mx1=max(dfs(tx*i,m,i),dfs(n-tx*i,m,k-i));
    		double mx2=max(dfs(n,ty*i,i),dfs(n,m-ty*i,k-i));
    		ans=min({ans,mx1,mx2});
    	}
    	return ans;
    }
    int main(){
    	double n,m;int k;
    	scanf("%lf%lf%d",&n,&m,&k);
    	printf("%.6lf",dfs(n,m,k));
    	return 0;
    }
    
    • 1

    信息

    ID
    1024
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    15
    已通过
    14
    上传者