最近我遇到了一个有趣的问题,它花了我几天的思考但我找不到多项式时间解决方案。所以我决定与你分享:
让
S = {s1,s2,...,sn} 0 <= si <= 3
T = {t1,t2,...,tn} 0 <= ti <= 1
现在我们想要以满足以下条件的方式更改S的元素:
t1 = s1 mod 2
ti = (si mod 2) xor ( floor(0.5 * s(i-1)) ) 2 <= i <= n
允许的唯一操作是将si增加或减少1或让它保持不变。目标是找到满足S和T的上述等式的最小增加或减少操作次数。对于任何给定的S和T,可以使用O(n)
中的动态编程简单地完成此任务。
主要问题是&#34;每个给定n的最小操作的期望值是多少?&#34;。第一个想法是在计算每对的最小运算之后,为给定的n生成S和T的每个序列,计算预期值或平均值。但这是在O(n8^n)
中运行的。是否有像DP这样的多项式时间算法来解决这个问题?