我完全不懂数据结构和算法. 另外, 这里是一些关于数据结构和算法的笔记. 当我认为我懂了之后, 或许会写一本书.
以下内容翻译自Purely Functional Data Structures.
任何对于数据结构的讨论都充斥着误解的潜在可能, 因为术语数据结构至少具有四个不同但相互关联的含义.
栈 (the stack), 就好像只存在一个栈似的, 而不是不同的时间有着不同的版本. 我们将会称这个身份为一个可持久化身份. 这个事项主要出现在可持久化数据结构的上下文中; 当我们言及相同数据结构的不同版本时, 我们的意思是这些不同版本共享着一个相同的可持久化身份.
(define ref
(case-lambda
((v i) (vector-ref v i))
((v i . j*) (apply ref (vector-ref v i) j*))))
(define (solve-IOI94P1 T)
(define N (vector-length T))
(define S (make-vector N))
(let iter ((i 0))
(cond
((= i N) (apply max (vector->list S)))
(else
(let iter ((j i))
(cond
((= j 0)
(vector-set! S 0 (+ (ref T i 0) (ref S 0))))
(else
(vector-set! S j (+ (ref T i j)
(max (ref S (- j 1)) (ref S j))))
(iter (- j 1)))))
(iter (+ i 1))))))
> (solve-IOI94P1
'#(#(7)
#(3 8)
#(8 1 0)
#(2 7 4 4)
#(4 5 2 6 5)))
30
题解网上很容易找到, 也没有必要再写什么. 注意make-vector
默认将每个元素置为0
.