このディレクトリの索引

最大部分列和(_数値ならび,_最大部分列和,_最大部分列) :-
        length(_数値ならび,_長さ),
        '全ての部分列・部分列和を得る'(_数値ならび,_長さ,_全ての部分列_部分列和),
        全ての部分列和から最大部分列和とその部分列を選別する(_全ての部分列和,_最大部分列和,_最大部分列).

'全ての部分列・部分列和を得る'(_数値ならび,_長さ,_全ての部分列_部分列和) :-
        findall([_部分列,_合計],(
                    between(1,_長さ,_n),
                    組み合わせ(_数値ならび,_n,_部分列),
                    sum(_部分列,_合計)),
                _全ての部分列_部分列和).

全ての部分列和から最大部分列和とその部分列を選別する(LL,_最大部分列和,_最大部分列) :-
        LL = [[_部分列_1,_合計_1]|R],
        最大部分列_部分列和(R,_合計_1,[_部分列_1],_最大部分列和,_最大部分列).

最大部分列_部分列和([],_最大部分列和,_最大部分列,_最大部分列和,_最大部分列).
最大部分列_部分列和([[_部分列,_合計]|R],_合計,LL_1,_最大部分列和,_最大部分列) :-
        最大部分列_部分列和(R,_合計,[_部分列|LL_1],_最大部分列和,_最大部分列).
最大部分列_部分列和([[_部分列,_合計]|R],_合計_1,LL_1,_最大部分列和,_最大部分列) :-
        _合計 > _合計_1,
        最大部分列_部分列和(R,_合計,[_部分列],_最大部分列和,_最大部分列).
最大部分列_部分列和([[_部分列,_合計]|R],_合計_1,LL_1,_最大部分列和,_最大部分列) :-
        _合計 < _合計_1,
        最大部分列_部分列和(R,_合計_1,LL_1,_最大部分列和,_最大部分列).