| 
											 
													Последний раз редактировалось arseniiv 27.01.2018, 01:07, всего редактировалось 4 раз(а).
												
  
						 
											(От меня вам устаревший пост, который был начат давно.) Фактически, счётчик подмножеств должен уметь отзываться на три «статуса перебора» — много/ровно (можно исключить ситуации «много» заранее, не разрешая выбирать слишком много какого-нибудь элемента), мало и неизвестно. Только при последнем делается самый маленький шаг, при остальных пропуски. Вот какой протокол у моей наконец-то допиленной программы на ваших данных из спойлера (слагаемые также идут от больших к меньшим, но не повторяются): 
{ *, *, *, *, *, *, *, * }      ? 
{ 1, *, *, *, *, *, *, * }      ? 
{ 1, 1, *, *, *, *, *, * }      ? 
{ 1, 1, 0, *, *, *, *, * }      ? 
{ 1, 1, 0, 0, *, *, *, * }      ? 
{ 1, 1, 0, 0, 0, *, *, * }      ? 
{ 1, 1, 0, 0, 0, 1, *, * }      ? 
{ 1, 1, 0, 0, 0, 1, 0, * }      ? 
{ 1, 1, 0, 0, 0, 1, 0, 0 }      < 
{ 1, 1, 0, 0, 0, 0, *, * }      < 
{ 1, 0, *, *, *, *, *, * }      ? 
{ 1, 0, 1, *, *, *, *, * }      ? 
{ 1, 0, 1, 0, *, *, *, * }      ? 
{ 1, 0, 1, 0, 1, *, *, * }      = 
{ 1, 0, 1, 0, 0, *, *, * }      ? 
{ 1, 0, 1, 0, 0, 1, *, * }      ? 
{ 1, 0, 1, 0, 0, 1, 0, * }      ? 
{ 1, 0, 1, 0, 0, 1, 0, 1 }      = 
{ 1, 0, 1, 0, 0, 1, 0, 0 }      < 
{ 1, 0, 1, 0, 0, 0, *, * }      < 
{ 1, 0, 0, *, *, *, *, * }      ? 
{ 1, 0, 0, 1, *, *, *, * }      ? 
{ 1, 0, 0, 1, 1, *, *, * }      ? 
{ 1, 0, 0, 1, 1, 0, *, * }      ? 
{ 1, 0, 0, 1, 1, 0, 0, * }      ? 
{ 1, 0, 0, 1, 1, 0, 0, 1 }      = 
{ 1, 0, 0, 1, 1, 0, 0, 0 }      < 
{ 1, 0, 0, 1, 0, *, *, * }      ? 
{ 1, 0, 0, 1, 0, 1, *, * }      ? 
{ 1, 0, 0, 1, 0, 1, 1, * }      ? 
{ 1, 0, 0, 1, 0, 1, 1, 0 }      < 
{ 1, 0, 0, 1, 0, 1, 0, * }      < 
{ 1, 0, 0, 1, 0, 0, *, * }      < 
{ 1, 0, 0, 0, *, *, *, * }      ? 
{ 1, 0, 0, 0, 2, *, *, * }      ? 
{ 1, 0, 0, 0, 2, 0, *, * }      ? 
{ 1, 0, 0, 0, 2, 0, 1, * }      ? 
{ 1, 0, 0, 0, 2, 0, 1, 0 }      < 
{ 1, 0, 0, 0, 2, 0, 0, * }      < 
{ 1, 0, 0, 0, 1, *, *, * }      < 
{ 0, *, *, *, *, *, *, * }      ? 
{ 0, 1, *, *, *, *, *, * }      ? 
{ 0, 1, 1, *, *, *, *, * }      ? 
{ 0, 1, 1, 0, *, *, *, * }      ? 
{ 0, 1, 1, 0, 1, *, *, * }      ? 
{ 0, 1, 1, 0, 1, 0, *, * }      ? 
{ 0, 1, 1, 0, 1, 0, 0, * }      ? 
{ 0, 1, 1, 0, 1, 0, 0, 0 }      < 
{ 0, 1, 1, 0, 0, *, *, * }      ? 
{ 0, 1, 1, 0, 0, 1, *, * }      ? 
{ 0, 1, 1, 0, 0, 1, 1, * }      ? 
{ 0, 1, 1, 0, 0, 1, 1, 0 }      < 
{ 0, 1, 1, 0, 0, 1, 0, * }      < 
{ 0, 1, 1, 0, 0, 0, *, * }      < 
{ 0, 1, 0, *, *, *, *, * }      ? 
{ 0, 1, 0, 1, *, *, *, * }      ? 
{ 0, 1, 0, 1, 1, *, *, * }      ? 
{ 0, 1, 0, 1, 1, 0, *, * }      ? 
{ 0, 1, 0, 1, 1, 0, 1, * }      ? 
{ 0, 1, 0, 1, 1, 0, 1, 0 }      < 
{ 0, 1, 0, 1, 1, 0, 0, * }      < 
{ 0, 1, 0, 1, 0, *, *, * }      < 
{ 0, 1, 0, 0, *, *, *, * }      ? 
{ 0, 1, 0, 0, 2, *, *, * }      ? 
{ 0, 1, 0, 0, 2, 1, *, * }      ? 
{ 0, 1, 0, 0, 2, 1, 0, * }      ? 
{ 0, 1, 0, 0, 2, 1, 0, 0 }      < 
{ 0, 1, 0, 0, 2, 0, *, * }      < 
{ 0, 1, 0, 0, 1, *, *, * }      < 
{ 0, 0, *, *, *, *, *, * }      ? 
{ 0, 0, 1, *, *, *, *, * }      ? 
{ 0, 0, 1, 1, *, *, *, * }      ? 
{ 0, 0, 1, 1, 1, *, *, * }      ? 
{ 0, 0, 1, 1, 1, 0, *, * }      ? 
{ 0, 0, 1, 1, 1, 0, 1, * }      ? 
{ 0, 0, 1, 1, 1, 0, 1, 0 }      < 
{ 0, 0, 1, 1, 1, 0, 0, * }      < 
{ 0, 0, 1, 1, 0, *, *, * }      < 
{ 0, 0, 1, 0, *, *, *, * }      ? 
{ 0, 0, 1, 0, 2, *, *, * }      ? 
{ 0, 0, 1, 0, 2, 1, *, * }      ? 
{ 0, 0, 1, 0, 2, 1, 0, * }      ? 
{ 0, 0, 1, 0, 2, 1, 0, 0 }      < 
{ 0, 0, 1, 0, 2, 0, *, * }      < 
{ 0, 0, 1, 0, 1, *, *, * }      < 
{ 0, 0, 0, *, *, *, *, * }      ? 
{ 0, 0, 0, 1, *, *, *, * }      ? 
{ 0, 0, 0, 1, 3, *, *, * }      ? 
{ 0, 0, 0, 1, 3, 0, *, * }      ? 
{ 0, 0, 0, 1, 3, 0, 0, * }      ? 
{ 0, 0, 0, 1, 3, 0, 0, 0 }      < 
{ 0, 0, 0, 1, 2, *, *, * }      ? 
{ 0, 0, 0, 1, 2, 1, *, * }      ? 
{ 0, 0, 0, 1, 2, 1, 1, * }      ? 
{ 0, 0, 0, 1, 2, 1, 1, 0 }      < 
{ 0, 0, 0, 1, 2, 1, 0, * }      < 
{ 0, 0, 0, 1, 2, 0, *, * }      < 
{ 0, 0, 0, 1, 1, *, *, * }      < 
{ 0, 0, 0, 0, *, *, *, * }      < 
  Символы справа показывают отклик считающей части, сам перебор использует только данные о максимальном допустимом числе вхождений элементов и эти отклики, чтобы узнать, куда дальше. Как у вас получилось на две строки меньше (97 vs. 99), удивительно.     -- Сб янв 27, 2018 03:00:56 --А, так у вас в последнем посте другие числа; тогда имелся в виду тот, который пораньше. Сейчас сравню с новыми. -- Сб янв 27, 2018 03:06:40 --UPD. Позор мне, ещё больше разница получается (120 шагов): 
{ *, *, *, *, *, *, *, *, * }   ? 
{ 1, *, *, *, *, *, *, *, * }   ? 
{ 1, 1, *, *, *, *, *, *, * }   ? 
{ 1, 1, 0, *, *, *, *, *, * }   ? 
{ 1, 1, 0, 0, *, *, *, *, * }   ? 
{ 1, 1, 0, 0, 0, *, *, *, * }   ? 
{ 1, 1, 0, 0, 0, 1, *, *, * }   = 
{ 1, 1, 0, 0, 0, 0, *, *, * }   ? 
{ 1, 1, 0, 0, 0, 0, 1, *, * }   ? 
{ 1, 1, 0, 0, 0, 0, 1, 1, * }   = 
{ 1, 1, 0, 0, 0, 0, 1, 0, * }   < 
{ 1, 1, 0, 0, 0, 0, 0, *, * }   ? 
{ 1, 1, 0, 0, 0, 0, 0, 2, * }   ? 
{ 1, 1, 0, 0, 0, 0, 0, 2, 1 }   = 
{ 1, 1, 0, 0, 0, 0, 0, 2, 0 }   < 
{ 1, 1, 0, 0, 0, 0, 0, 1, * }   < 
{ 1, 0, *, *, *, *, *, *, * }   ? 
{ 1, 0, 1, *, *, *, *, *, * }   ? 
{ 1, 0, 1, 0, *, *, *, *, * }   ? 
{ 1, 0, 1, 0, 1, *, *, *, * }   ? 
{ 1, 0, 1, 0, 1, 0, *, *, * }   ? 
{ 1, 0, 1, 0, 1, 0, 0, *, * }   ? 
{ 1, 0, 1, 0, 1, 0, 0, 1, * }   = 
{ 1, 0, 1, 0, 1, 0, 0, 0, * }   < 
{ 1, 0, 1, 0, 0, *, *, *, * }   ? 
{ 1, 0, 1, 0, 0, 1, *, *, * }   ? 
{ 1, 0, 1, 0, 0, 1, 1, *, * }   ? 
{ 1, 0, 1, 0, 0, 1, 1, 0, * }   ? 
{ 1, 0, 1, 0, 0, 1, 1, 0, 1 }   = 
{ 1, 0, 1, 0, 0, 1, 1, 0, 0 }   < 
{ 1, 0, 1, 0, 0, 1, 0, *, * }   ? 
{ 1, 0, 1, 0, 0, 1, 0, 2, * }   = 
{ 1, 0, 1, 0, 0, 1, 0, 1, * }   < 
{ 1, 0, 1, 0, 0, 0, *, *, * }   < 
{ 1, 0, 0, *, *, *, *, *, * }   ? 
{ 1, 0, 0, 1, *, *, *, *, * }   ? 
{ 1, 0, 0, 1, 1, *, *, *, * }   ? 
{ 1, 0, 0, 1, 1, 1, *, *, * }   ? 
{ 1, 0, 0, 1, 1, 1, 0, *, * }   ? 
{ 1, 0, 0, 1, 1, 1, 0, 0, * }   ? 
{ 1, 0, 0, 1, 1, 1, 0, 0, 1 }   = 
{ 1, 0, 0, 1, 1, 1, 0, 0, 0 }   < 
{ 1, 0, 0, 1, 1, 0, *, *, * }   ? 
{ 1, 0, 0, 1, 1, 0, 1, *, * }   ? 
{ 1, 0, 0, 1, 1, 0, 1, 1, * }   ? 
{ 1, 0, 0, 1, 1, 0, 1, 1, 1 }   = 
{ 1, 0, 0, 1, 1, 0, 1, 1, 0 }   < 
{ 1, 0, 0, 1, 1, 0, 1, 0, * }   < 
{ 1, 0, 0, 1, 1, 0, 0, *, * }   < 
{ 1, 0, 0, 1, 0, *, *, *, * }   ? 
{ 1, 0, 0, 1, 0, 1, *, *, * }   ? 
{ 1, 0, 0, 1, 0, 1, 1, *, * }   ? 
{ 1, 0, 0, 1, 0, 1, 1, 2, * }   ? 
{ 1, 0, 0, 1, 0, 1, 1, 2, 1 }   = 
{ 1, 0, 0, 1, 0, 1, 1, 2, 0 }   < 
{ 1, 0, 0, 1, 0, 1, 1, 1, * }   < 
{ 1, 0, 0, 1, 0, 1, 0, *, * }   < 
{ 1, 0, 0, 1, 0, 0, *, *, * }   < 
{ 1, 0, 0, 0, *, *, *, *, * }   < 
{ 0, *, *, *, *, *, *, *, * }   ? 
{ 0, 1, *, *, *, *, *, *, * }   ? 
{ 0, 1, 1, *, *, *, *, *, * }   ? 
{ 0, 1, 1, 1, *, *, *, *, * }   ? 
{ 0, 1, 1, 1, 0, *, *, *, * }   ? 
{ 0, 1, 1, 1, 0, 0, *, *, * }   ? 
{ 0, 1, 1, 1, 0, 0, 0, *, * }   ? 
{ 0, 1, 1, 1, 0, 0, 0, 0, * }   ? 
{ 0, 1, 1, 1, 0, 0, 0, 0, 1 }   = 
{ 0, 1, 1, 1, 0, 0, 0, 0, 0 }   < 
{ 0, 1, 1, 0, *, *, *, *, * }   ? 
{ 0, 1, 1, 0, 1, *, *, *, * }   ? 
{ 0, 1, 1, 0, 1, 0, *, *, * }   ? 
{ 0, 1, 1, 0, 1, 0, 1, *, * }   ? 
{ 0, 1, 1, 0, 1, 0, 1, 0, * }   ? 
{ 0, 1, 1, 0, 1, 0, 1, 0, 1 }   = 
{ 0, 1, 1, 0, 1, 0, 1, 0, 0 }   < 
{ 0, 1, 1, 0, 1, 0, 0, *, * }   ? 
{ 0, 1, 1, 0, 1, 0, 0, 2, * }   = 
{ 0, 1, 1, 0, 1, 0, 0, 1, * }   < 
{ 0, 1, 1, 0, 0, *, *, *, * }   ? 
{ 0, 1, 1, 0, 0, 1, *, *, * }   ? 
{ 0, 1, 1, 0, 0, 1, 1, *, * }   ? 
{ 0, 1, 1, 0, 0, 1, 1, 1, * }   ? 
{ 0, 1, 1, 0, 0, 1, 1, 1, 1 }   = 
{ 0, 1, 1, 0, 0, 1, 1, 1, 0 }   < 
{ 0, 1, 1, 0, 0, 1, 1, 0, * }   < 
{ 0, 1, 1, 0, 0, 1, 0, *, * }   < 
{ 0, 1, 1, 0, 0, 0, *, *, * }   < 
{ 0, 1, 0, *, *, *, *, *, * }   ? 
{ 0, 1, 0, 1, *, *, *, *, * }   ? 
{ 0, 1, 0, 1, 1, *, *, *, * }   ? 
{ 0, 1, 0, 1, 1, 1, *, *, * }   ? 
{ 0, 1, 0, 1, 1, 1, 1, *, * }   = 
{ 0, 1, 0, 1, 1, 1, 0, *, * }   ? 
{ 0, 1, 0, 1, 1, 1, 0, 1, * }   ? 
{ 0, 1, 0, 1, 1, 1, 0, 1, 1 }   = 
{ 0, 1, 0, 1, 1, 1, 0, 1, 0 }   < 
{ 0, 1, 0, 1, 1, 1, 0, 0, * }   < 
{ 0, 1, 0, 1, 1, 0, *, *, * }   ? 
{ 0, 1, 0, 1, 1, 0, 1, *, * }   ? 
{ 0, 1, 0, 1, 1, 0, 1, 2, * }   ? 
{ 0, 1, 0, 1, 1, 0, 1, 2, 1 }   = 
{ 0, 1, 0, 1, 1, 0, 1, 2, 0 }   < 
{ 0, 1, 0, 1, 1, 0, 1, 1, * }   < 
{ 0, 1, 0, 1, 1, 0, 0, *, * }   < 
{ 0, 1, 0, 1, 0, *, *, *, * }   < 
{ 0, 1, 0, 0, *, *, *, *, * }   < 
{ 0, 0, *, *, *, *, *, *, * }   ? 
{ 0, 0, 1, *, *, *, *, *, * }   ? 
{ 0, 0, 1, 1, *, *, *, *, * }   ? 
{ 0, 0, 1, 1, 1, *, *, *, * }   ? 
{ 0, 0, 1, 1, 1, 1, *, *, * }   ? 
{ 0, 0, 1, 1, 1, 1, 1, *, * }   ? 
{ 0, 0, 1, 1, 1, 1, 1, 2, * }   = 
{ 0, 0, 1, 1, 1, 1, 1, 1, * }   < 
{ 0, 0, 1, 1, 1, 1, 0, *, * }   < 
{ 0, 0, 1, 1, 1, 0, *, *, * }   < 
{ 0, 0, 1, 1, 0, *, *, *, * }   < 
{ 0, 0, 1, 0, *, *, *, *, * }   < 
{ 0, 0, 0, *, *, *, *, *, * }   < 
[20, 18, 5], [20, 18, 3, 2], [20, 18, 2, 2, 1], [20, 14, 7, 2], [20, 14, 5, 3, 1], [20, 14, 5, 2, 2], [20, 10, 7, 5, 1], [20, 10, 7, 3, 2, 1], [20, 10, 5, 3, 2, 2, 1], [18, 14, 10, 1], [18, 14, 7, 3, 1], [18, 14, 7, 2, 2], [18, 14, 5, 3, 2, 1], [18, 10, 7, 5, 3], [18, 10, 7, 5, 2, 1], [18, 10, 7, 3, 2, 2, 1], [14, 10, 7, 5, 3, 2, 2] 
   
					 					 |