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; }
Sometimes it s the very people who no one imagines anything of. who do the things that no one can imagine.