洛谷P1984 [SDOI2008]烧水问题

来源:互联网 发布:数据采集 久其格格 编辑:程序博客网 时间:2024/04/28 21:02

递推 数学

题目传送门

感觉很水啊。。。

先烧开第一个,不断把热量传给后面的(也就是不断二分),再烧开第二个,同第一个一样做。以此类推。这样就是最佳方案(别问我怎么证明)

然后推一推式子,就可以得到这样一个递推式:

f[x+1]=f[x](112x)

然后就这么推下去就行啦!

既然没有多组询问,不存数组也是可以的

注意精度问题

代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;double ans=0;int main(){    scanf("%d",&n);    double now=420000.00/n;//一定要加.00    for (int i=1;i<=n;i++){        ans+=now;        now*=(1-0.5/i);//递推    }    printf("%.2lf\n",ans);    return 0;}
原创粉丝点击