POJ 1953 DP

来源:互联网 发布:vim python开发环境 编辑:程序博客网 时间:2024/05/16 19:29

二进制位数为n,其中没有1在相邻两个数位上,求有几种可能

设f[i]表示第前i位有几种可能,o[i]记录前i位最后一位为1的个数

则o[i]=f[i-1]-o[i-1],(1)

   f[i]=f[i-1]+o[i],   (2)

f[i-1]表示第i位为0的情况,o[i]表示第i位为1的情况

进一步推导:o[i]=f[i-1]-o[i-1]=(f[i-2]+o[i-1])-o[i-1]=f[i-2]

所以得出f[i]=f[i-1]+f[i-2],即若第i位为0的情况,前面f[i-1]包含的情况都满足,若第i位为1,则第i-1位必为0,则前i-2位包含的情况都满足,这是一个Fibonacci数列

代码: