지그재그 순서가 순서입니다 : 1 3 2
및 2 1 2
는 지그재그 있으며, 1 2 3
및 1 2 2
는 없습니다. N 주어진 두 숫자와계산 지그재그 순서
, 크기가 n 인 다수의 시퀀스 예
번호 1..k로부터 생성 될 수있는 방법을 알아 K : N = 3 K = 3 않음 10
(121), (212) , 131, 313, 232, 323, 132, 231, 312, 213 (명확성을 위해 생성 할 필요 없음)
이 솔루션이 나왔습니다. 더 잘할 수 있는지 말해주세요.
import sys
ZAG = {}
ZIG = {}
def zag(n, i):
result = 0
for j in xrange(1, i):
if (n - 1, j) not in ZIG:
ZIG[(n - 1, j)] = zig(n - 1, j)
result += ZIG[(n - 1, j)]
return result
def zig(n, i):
result = 0
for j in xrange(i + 1, MAX_NUMBER + 1):
if (n - 1, j) not in ZAG:
ZAG[(n - 1, j)] = zag(n - 1, j)
result += ZAG[(n - 1, j)]
return result
def count(n):
if n == 1:
return MAX_NUMBER
result = 0
for i in xrange(1, MAX_NUMBER + 1):
ZIG[(1, i)] = 1
ZAG[(1, i)] = 1
for i in xrange(1, MAX_NUMBER + 1):
result += 2*zag(n, i)
return result
def main(argv):
global MAX_NUMBER
MAX_NUMBER = int(argv[1])
print count(int(argv[0]))
if __name__ == "__main__":
main(sys.argv[1:])
가능한 중복 : http://stackoverflow.com/questions/6914969/dynamic-programming-find-longest-subsequence-that-is-zig-zag –