您的位置:首页 > 其它

洛谷P1984 [SDOI2008]烧水问题

2017-10-31 20:18 204 查看

递推 数学

题目传送门

感觉很水啊。。。

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

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

f[x+1]=f[x]∗(1−12x)

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

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

注意精度问题

代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: