1026 [SCOI2009]生日快乐 dfs
链接:https://ac.nowcoder.com/acm/contest/23156/1026
来源:牛客网
题目描述
输入描述:
包含三个整数,X Y N。
1 ≤ X,Y ≤ 10000 ; 1 ≤ N ≤ 10
输出描述:
包含一个浮点数,保留6位小数。
备注:
100%的数据,满足1≤X,Y≤10000;1≤N≤101 \le X,Y \le 10000 ; 1 \le N \le 101≤X,Y≤10000;1≤N≤10 。
分析
二分,贪心,搜索。。
就搜索能用了,二分也分不出啥,这题数据量小。。
其实拿到题,完全不会写。。。我的第一思维好像是贪心,
然后看了雨巨。。手把手教搜索,是真的贴心
切蛋糕嘛,就就直接切。。
然后有个关键,必须切x/n,y/n的倍数的量,直接枚举这个量。然后当切到最后一个的时候计算一下y/x。
dfs(x,y,n)表示当前切的蛋糕的长,宽,需要切的数量
int dy[] = {1,0,-1,0,1,1,-1,-1};
int dx[] = {0,1,0,-1,1,-1,1,-1};
/*文档区
*/
//-------------------------代码----------------------------
//#define int LL
const int N = 1e5+10;
int x,y,n,m;
double dfs(double x,double y,int n) {
if(n == 1) {
return max(x,y) / min(x,y);
}
double a = x / n,b = y / n,ans = 0x3f3f3f3f;
for(int i = 1;i <= n / 2;i++) {
ans = min(ans, min(max(dfs(i * a, y, i), dfs(x - i * a, y, n - i)), max(dfs(x, i * b, i), dfs(x, y - i * b, n - i)))); }
return ans ;
}
void solve()
{
cin>>x>>y>>n;
// V<V<int>>mp(n+1,V<int>(m+1));
printf("%.6lf\n",dfs(x,y,n));
}
signed main(){
clapping();TLE;
// int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}
/*样例区
*/
//------------------------------------------------------------