BZOJ 1246 & 有点不一样的概率DP

题意:

  题意够坑的啊...

  一个色子有n个面,第k次掷出一个加上这个k.求掷出所有面的期望值.

  我一直以为值是色子面上的...

  那么问题来了在色子面上怎么做...n还是1w级别...

SOL:

  对着理解错的题面想了半天还是没想出来比O(n^2)强的算法..

  这题跟上次lightoj那道丝帛题有点像,但那个每个面都可以看做一样的所以丝帛很多...

  空间也一样要炸,然后不行看题解...发现原来是这样...

  感觉对着原来的问题每种情况都相当于是独立的...感觉除了撞鸭其它没法搞啊...

  然而感觉改了以后有点想法但还是不会搞...

  概率差一逼...

  然后膜拜一下大神题解...膜拜一下用latex的大神犇...

  http://blog.csdn.net/braketbn/article/details/51024591

  看是看懂了...但是怕是以后考场上推不出来...以后没事多推推...再等到会熟练运用latex的时候补一下过程....

Code:巨短不折叠了...

  

#include <cstdio>
const int maxn = 10005;
double g[maxn], f[maxn];
int main() {
	int n; scanf("%d", &n);
	g[n] = 0,f[n] = 0;
	for(int i = n - 1; i >= 0; i--) g[i] = g[i + 1] + n /(double)(n - i);
	for(int i = n - 1; i >= 0; i--) f[i] = (n + g[i] * i + (f[i + 1] + g[i + 1]) * (n - i)) /(double)(n - i);
	printf("%.2lf\n", f[0]);
	return 0;
}

 

posted @ 2016-03-31 23:26  YCuangWhen  阅读(531)  评论(1编辑  收藏  举报