このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1311089619/804
#  [1] 授業単元:並列計算 
#  [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/UfRWs3k5 
#   
#  課題 ナップザック問題をOpenMPで並列化し,並列化効率などについて分析せよ.
#  (1) ナップザック問題とはいくつかの荷物を袋に入れるときに最大の値段に
#      なるように袋に詰める,組み合わせを求める問題
#  (2) N個の荷物があって,個々の荷物の重さをWi,値段をPiとする.
#      袋には最大Wの重さまでいれられる.このとき,最大でいくら分を
#      いれることができるのかを求める.
#  (3) 幅優先探索型にする

ナップザック問題(_重量限界,_最大金額) :-
        findall((_金額,_重み),(
                    荷物(_重み,_金額)),
                L1),
        length(L1,Len),
        findmax(金額合計,(
                    for(1,M,Len),
                    組合せ(L,M,L2),
                    重さ合計(L2,_重さ合計),
                    _重さ合計=<_重量限界,
                    金額合計(L2,_金額合計)),
                _最大金額).

金額合計([],0).
金額合計([(_金額,_)|R1],_合計金額) :-
        金額合計(R1,_金額合計_1),
        _合計金額 is _合計金額_1 + _金額.

重さ合計([],0).
重さ合計([(_重さ,_)|R1],_合計重さ) :-
        重さ合計(R1,_重さ合計_1),
        _合計重さ is _合計重さ_1 + _重さ.