码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4986 Little Pony and Alohomora Part I(递推+犹拉常数)

时间:2014-09-01 15:38:53      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   for   2014   

HDU 4986 Little Pony and Alohomora Part I

题目链接

题意:一些钥匙随机放在箱子里,现在问打开次数期望

思路:每种方式相当于一个置换的循环个数,那么考虑f[i]为i个箱子的情况,f[i + 1]要么就是放在最后多一个循环,要么就是插入中间循环个数不变,对应的转移为f[i + 1] = (f[i] + 1) / i + f[i] * (i - 1) / i 化简得到f[i] = f[i - 1] + 1 / i

这个式子i越大,越趋近lni + C,这个C为犹拉常数,所以先递推出数字小的情况,大的就直接计算

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

const int N = 1000005;
const double sb = 0.577215664901;

int n;

double ans[N];

int main() {
	for (int i = 1; i < N; i++)
		ans[i] = ans[i - 1] + 1.0 / i;
	while (~scanf("%d", &n)) {
		if (n >= N) printf("%.4lf\n", sb + log(n * 1.0));
		else printf("%.4lf\n", ans[n]);
	}
	return 0;
}


HDU 4986 Little Pony and Alohomora Part I(递推+犹拉常数)

标签:style   blog   http   color   os   io   ar   for   2014   

原文地址:http://blog.csdn.net/accelerator_/article/details/38980295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!