偷个懒,转自hzwer
【“这种煞笔题怎么总有人问”,被吧主D了。。。
用f[i]表示已经拥有了i张邮票,则期望还需要购买的邮票数
则f[n]=0
f[i]=f[i]*(i/n)+f[i+1]*((n-i)/n)+1
整理得f[i]=f[i+1]+n/(n-i);
设g[i]为还需要的钱
g[i]=((n-i)/n)*(g[i+1]+f[i+1])+(i/n)*(g[i]+f[i])+1
因为可以视为这张票是1元买的,而后面的每张票都贵了1元
所以要加上f[i+1]或f[i]
然后化简得g[i]=g[i+1]+f[i+1]+((n*i)/((n-i)*n))*f[i]+(n/(n-i))】
感觉自己的智商都不足以应付煞笔题了
var f,g:array[0..10010] of double; i,n:longint; begin readln(n); for i:=n-1 downto 0 do f[i]:=f[i+1]+n/(n-i); for i:=n-1 downto 0 do g[i]:=g[i+1]+f[i+1]+i/(n-i)*f[i]+n/(n-i); writeln(g[0]:0:2); end.