学弟问的题
问题是:为什么题解区第一篇 走回自己以后代价是f[i]+1
只考虑剩下的(n-i)种邮票取完的期望价格,这是整个问题的子问题
剩(x)种时,我们只考虑这个规模为(x)的子问题,取完这种假如花了(k)步。
那么剩(x+1)种时,其有((n-x-1)/n)的概率转换为“做完规模为(x)的子问题 再多走了一步”,步数是(k+1)
有((x+1)/n)的概率转换为"做完规模为(x+1)的子问题 还要多走一步 继续做同一个子问题"
对于每一个可能的(k),都有唯一的一个(k+1)与其对应,因此(g[n-x-1]=(g[n-x]+1+f[n-x])*(n-x-1)/n),
这个(f[n-x])相当于所有可能的(k)乘上其出现的概率之和 (期望的定义)
[f=sum_{k}p(k) imes k
]
[sum_kp(k) imes (k+1)=1+sum_{k}p(k) imes k = 1+f
]
根据上面
假设剩(i)种邮票未取过,取完它们的期望代价为(dp[i]),期望步数是(f[i])
那么
(dp[i] = (1 + dp[i-1] + f[i-1]) imes frac{i}{n}+ (1+dp[i] + f[i]) imes frac{n-i}{n})
(f[i] = (1 + f[i-1]) imes frac{i}{n} + (1 + f[i]) imes frac{n-i}{n})
即
f[i] = 1.0*n/(1.0*i)+f[i-1];
dp[i] = (dp[i-1]+f[i-1])+((n-i)*1.0)/(i*1.0)*f[i]+(1.0*n)/(1.0*i);
答案是(dp[n])
边界(dp[0]=0, f[0]=0, f[1]=1)