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 }
随性Code