This comment is reply for 4829 186: 同じ計算を何回もしているので#1671を...(魔方分割数). Go to thread root.
186 #4887(2007/12/19 14:31 GMT) [ Scheme ] Rating1/1=1.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
(use srfi-1) (use util.combinations) (define (maho-memo n) ;tableに足してcnになるリストを入れておく (define table (let ((cn (/ (* n (+ (* n n) 1)) 2))) (filter (lambda (li) (= (apply + li) cn)) (combinations (iota (* n n) 1) n)))) (define maho-in-memo (let1 tab (make-hash-table 'equal?) (define (memo m l v) (hash-table-put! tab (cons m l) v) v) (lambda (m l) (cond ((= m 0) 1) ((hash-table-get tab (cons m l) #f)) (else (memo m l (apply + (map ; 今のlからaを除いたリストでmaho-in-memoを呼ぶ (lambda (a) (maho-in-memo (- m n) (lset-difference equal? l a))) (filter ;(car l)で始まるtableの中のリストを抜き出す (lambda (li) (and (equal? (car li) (car l)) (lset<= equal? li l))) table))))))))) (maho-in-memo (* n n) (iota (* n n) 1))) (time (maho-memo 5))
Rating1/1=1.00-0+
[ reply ]
186 #4887() [ Scheme ] Rating1/1=1.00
gosh>
;(time (maho-memo 5))
; real 43.391
; user 42.625
; sys 0.641
3245664
Rating1/1=1.00-0+