Процедура проверки


Процедура проверки имеет вид: procedure Check; (* SetS, BestS, NumS, MaxS, M - глобальные *) var i,j :integer; begin SetS:=[]; for i:=1 to N do for j:=1 to N-1 do SetS:=Sets+[Q[i,j]]; SetS:=SetS+[Q[1,N]]; i:=M; while i in SetS do Inc(i); if i>MaxS then begin NumS:=1; BestS[NumS]:=S; MaxS:=i;(* на единицу больше действительной длины *) end else if i=MaxS then begin Inc(NumS); BestS[NumS]:=S; end; end; Общая схема уточнена. Но если довести ее до программы, то решение, например, для исходных данных n=6, m=1, k=1 за реальное время не будет получено. Необходимо сокращать перебор, искать эвристики, позволяющие сделать это. 1-я эвристика. Пусть у нас есть (n-1) сектор, в которые записаны числа, образующие последовательность m, m+1, ... . количество сумм (арифметическая прогрессия) равно n*(n-1)div2, т. е. это количество различных чисел, получаемое из чисел в заполненных n-1 секторе. Обозначим через X первое число из последовательности m, m+1,
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz