BZOJ-1024 生日快乐 DFS+一丝sb的数学思考
1024: [SCOI2009]生日快樂
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 1948 Solved: 1391
[Submit][Status][Discuss]
Description
windy的生日到了,為了慶祝生日,他的朋友們幫他買了一個邊長分別為 X 和 Y 的矩形蛋糕。現在包括windy,一共有 N 個人來分這塊大蛋糕,要求每個人必須獲得相同面積的蛋糕。 windy主刀,每一切只能平行于一塊蛋糕的一邊(任意一邊),并且必須把這塊蛋糕切成兩塊。這樣,要切成 N 塊蛋糕,windy必須切 N-1 次。為了使得每塊蛋糕看起來漂亮,我們要求 N 塊蛋糕的長邊與短邊的比值的最大值最小。你能幫助windy求出這個比值么?
Input
包含三個整數,X Y N。
Output
包含一個浮點數,保留6位小數。
Sample Input
5 5 5
Sample Output
1.800000
HINT
【數據規模和約定】
100%的數據,滿足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。
由于面積相同,所以切法非常的簡單,也就是說所有的切割的狀態都是可以枚舉的,鑒于N的數量小的可憐,可以直接暴力搜索出所有可能狀態,并找出答案即可(天真的我看見”最大值最小“還想二分呢….)
代碼如下:
/**************************************************************Problem: 1024User: DaD3zZLanguage: C++Result: AcceptedTime:44 msMemory:1284 kb ****************************************************************/#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; double dfs(int n,double x,double y) {int i;double ans=1e6;if(n==1)return exp(fabs(log(x/y)));for(i=1;i<=n/2;i++)ans=min(ans,max(dfs(i,x/n*i,y),dfs(n-i,x-x/n*i,y)));for(i=1;i<=n/2;i++)ans=min(ans,max(dfs(i,x,y/n*i),dfs(n-i,x,y-y/n*i)));return ans; } int main() {int n,x,y;scanf("%d%d%d",&x,&y,&n);printf("%.6lf\n", dfs(n,x,y)); }轉載于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5346243.html
總結
以上是生活随笔為你收集整理的BZOJ-1024 生日快乐 DFS+一丝sb的数学思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [c++]Struct和Class的区别
- 下一篇: IOS线程学习(一)