bzoj1426

偷个懒,转自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.
View Code
原文地址:https://www.cnblogs.com/phile/p/4511833.html