1024: [SCOI2009]生日快乐

暴力题,N<=10,没注意到平均分,读题真是。。

我们对于一个矩形分成两块进行搜。然后求较大值。

ans=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n-i);

就是分成两块,分别递归的样子。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<iostream>
 6 using namespace std;
 7 
 8 double dfs(double x,double y,int n)
 9 {
10    if (n==1) return max(x/y,y/x);
11    double tmp=10e10;
12 
13    for (int i=1;i<n;i++){
14    tmp=min(tmp,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n-i)));
15    tmp=min(tmp,max(dfs(x/n*i,y,i),dfs(x/n*(n-i),y,n-i)));
16    }
17    return tmp;
18 }
19 
20 int main()
21 {
22     double  x,y;
23     int n;
24     cin>>x>>y>>n;
25     printf("%.6lf\n",dfs(x,y,n));
26     return 0;
27 }
View Code

 

posted on 2014-11-09 18:46  forgot93  阅读(174)  评论(0编辑  收藏  举报

导航