bzoj 1024 [SCOI2009]生日快乐——模拟

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1024

可以枚举这边放多少块、那边放多少块。

注意精度。不要每次用x*y/base算有多少块,传参较好。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
const int N=15;
const db INF=1005;
db n,x,y,base,ans;
db dfs(db x,db y,int k)
{
    if(k==1)return max(x,y)/min(x,y);
    db ret=INF;
    for(int i=1;i<k;i++)
    {
        db l=i*base/y;
        ret=min(ret,max(dfs(l,y,i),dfs(x-l,y,k-i)));
        l=i*base/x;
        ret=min(ret,max(dfs(x,l,i),dfs(x,y-l,k-i)));
    }
    return ret;
}
int main()
{
    scanf("%lf%lf%lf",&x,&y,&n);
    base=x*y/n;
    printf("%.6lf\n",dfs(x,y,n));
    return 0;
}

 

posted on 2018-07-27 16:50  Narh  阅读(106)  评论(0编辑  收藏

导航