这是来自spoj的
problem状态
For a string of n bits x1,x2,x3,…,Xn
the adjacent bit count of the string
(AdjBC(x)) is given byX1*X2 + X2*X3 + X3*X4 + … + Xn-1 *
Xnwhich counts the number of times a 1
bit is adjacent to another 1 bit. For
example:AdjBC(011101101) = 3
AdjBC(111101101) = 4
AdjBC(010101010) = 0
问题是:编写一个程序,它将整数n和k作为输入,并返回满足AdjBC(x)= k的n位(2位中的2位)的位串数x.
我不知道如何解决这个问题.你能帮帮我解决这个问题吗?
谢谢
解决方法
通常在组合问题中,有助于查看它产生的一组值.使用蛮力我计算了下表:
k 0 1 2 3 4 5 6 n +---------------------------- 1 | 2 0 0 0 0 0 0 2 | 3 1 0 0 0 0 0 3 | 5 2 1 0 0 0 0 4 | 8 5 2 1 0 0 0 5 | 13 10 6 2 1 0 0 6 | 21 20 13 7 2 1 0 7 | 34 38 29 16 8 2 1
第一列是熟悉的Fibonacci序列,并且满足递归关系f(n,0)= f(n-1,0)f(n-2,0)
其他列满足递推关系f(n,k)= f(n – 1,k)f(n – 1,k – 1)f(n – 2,k) – f(n – 2,k – 1 )
有了这个,你可以做一些动态编程:
INPUT: n,k row1 <- [2,...] (k+1 elements) row2 <- [3,1,...] (k+1 elements) repeat (n-2) times for j = k downto 1 do row1[j] <- row2[j] + row2[j-1] + row1[j] - row1[j-1] row1[0] <- row1[0] + row2[0] swap row1 and row2 return row2[k]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。