我想解决没有循环的问题。假设我们有N个位置,并且对于每个地方,您可以选择[p,q]之间的数字,但是i + 1的数字应该小于或等于i的数字。现在如何在没有暴力的情况下计算所有可能的字符串。
例如假设我们有2个位置,您可以选择[2,3]之间的数字,然后可能的序列可以是:
3 3
3 2
2 2
由于地点数量不受限制,因此无法用简单的循环解决它。
答案 0 :(得分:0)
选择(q-p + N,N),其中choose是二项式系数。
p和q之间的弱减少序列与0和s长度为q-p + N的序列进行双射,其中序列恰好具有N个序列。很明显,这些序列的数量是选择的(q-p + N,N),因为这是从q-p + N事物中选择N个事物的方式的数量。
给定序列xs为0和1且长度为q-p + N且具有N 1> s,该伪代码在p和q之间产生弱减少的数字序列:
c = q
for x in xs
if x = 1 then output c
if x = 0 then c <- c - 1
相反,给定p和q之间长度为N的弱xs序列xs,该伪代码产生0和f的序列,长度为q-p + N且恰好为N 1&#39;第
c = q
while xs is not empty
if c = head(hs) then
output 1
xs <- tail(xs)
else
output 0
c <- c - 1
while c > p
output 0
c <- c - 1
此处head(xs)
表示xs列表中的第一个内容,tail(xs)
表示列表的其余部分。