<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3491614</guid>
        <pubDate>Tue, 17 Jun 2014 10:39:28 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3491614</link>
        <description><![CDATA[Swetlana: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3307159'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2013-04-29T14:19:14+00:00">29.04.13, 14:19</time></span><div class='quote '>вот ещё одна задачка на набор сумм или одномерную упаковку<br>
&lt;...&gt;</div></div><br>
Дипломница защитилась, бухгалтерская программа для закупок университетом всякой всячины. Прямо на защите от членов ГЭК поступили предложения о покупке программы. <br>
<br>
Математическая составляющая - набиралась заданная сумма с заданным допустимым отклонением из заданных слагаемых. Размерность сверхбольшая, слагаемые целые положительные, набирали миллионы из нескольких сотен слагаемых, копейки округляли до рублей. Хороший приближённый алгоритм получился, точный и быстрый, абсолютная погрешность посчитана, относительная асимптотическая равна 1. Удивительно было бы, если бы не получился, столько лет я этими наборами сумм на сорцах занималась  :D <br>
Как статью опубликуем (на английском), выложу здесь и статью, и подробное описание алгоритма. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2014-06-17T14:48:34+04:00">17.06.14, 10:48</time></span></span><br>
Да, выч. сложность - O(n<sup class='tag-sup'>3</sup>), где n - количество слагаемых и не зависит от размера суммы.<br>
Основная идея - рекурсивно вызывался FFD с некоторыми хитростями, пока не оставалось 20 слагаемых, заием сумма мгновенно добиралась точным алгоритмом (алгоритмом с возвратом). Время работы точного для фиксированного кол-ва слагаемых, само собой, в выч. сложность не входит. <br>
И ещё массив слагаемых встряхивали и снова алгоритм запускали. Оно особо и не надо, и на одном запуске хорошо работало, но при O(n<sup class='tag-sup'>3</sup>) можно себе позволить.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315532</guid>
        <pubDate>Thu, 23 May 2013 08:42:48 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315532</link>
        <description><![CDATA[Rate93: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3315405'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MBo &#064; <time class="tag-quote__quoted-time" datetime="2013-05-23T05:47:50+00:00">23.05.13, 05:47</time></span><div class='quote '>Ну как - если в массиве T ячейки с индексами Ves0-D..Ves0+D пусты, то сумму с таким допуском (+-) не набрать</div></div><br>
Так а размерность массива T[0..N,0..Ves0+D], как понимать фразу <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>если в массиве T ячейки с индексами Ves0-D..Ves0+D пусты</div></div>]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315405</guid>
        <pubDate>Thu, 23 May 2013 05:47:50 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315405</link>
        <description><![CDATA[MBo: Ну как - если в массиве T ячейки с индексами Ves0-D..Ves0+D пусты, то сумму с таким допуском (+-) не набрать]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315403</guid>
        <pubDate>Thu, 23 May 2013 05:42:10 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315403</link>
        <description><![CDATA[Rate93: Извиняюсь за вопрос, вроде всё элементарно, просто поиск слагаемых завёл под условие <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if (Ves0 - D &#60;= sum &#60;= Ves0 + D)</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315383</guid>
        <pubDate>Thu, 23 May 2013 04:41:54 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315383</link>
        <description><![CDATA[Rate93: Но возникла проблема, встречаются суммы округлённые до сотых, соответственно появляется допуск (применительно к использованному алгоритму D=10, т.к. исходные числа домножаю на 1000). Так вот теперь такая проблема: как доработать алгоритм, чтобы поиск слагаемых не осуществлялся если найденная сумма -/+ допуск не ровна данной сумме?<br>
<br>
Приведу алгоритм Swetlana ещё раз:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const N=4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves0=25;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D=2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;M: array[1..N]of integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T:array[0..N,0..Ves0+D]of byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves,sum,i,j,dmin:integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves:=Ves0+D;</div><div class="code_line">&nbsp;&nbsp; &nbsp;M[1]:= 18; M[2]:= 4; M[3]:= 4; M[4]:= 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T[0,0]:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j := 1 to Ves do T[0, j] := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 1 to &nbsp;N do T[i, 0] := 1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 1 to N do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for j := 1 to Ves do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if j &#62;= M[i] then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if &nbsp;T[i - 1, j]&#62; T[i - 1, j - M[i]] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T[i,j]:= T[i - 1, j]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else T[i, j]:= T[i - 1, j - M[i]];end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else T[i, j]:= T[i - 1, j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dmin:=Ves; sum:=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j:=Ves downto 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if T[N, j] = 1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if dmin&#62;abs(Ves0-j) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin dmin:=abs(Ves0-j); sum:=j; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(&#39;Sum=&#39;,sum,&#39; dmin=&#39;,dmin);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := N downto 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if T[i, sum] = T[i - 1, sum] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeln (i, &#39;---No&#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin writeln (i, &#39; &nbsp; &#39;,M[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum := sum - M[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;readln;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end.</div></ol></div></div></div></div>]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315378</guid>
        <pubDate>Thu, 23 May 2013 04:21:29 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3315378</link>
        <description><![CDATA[Rate93: В общем применил алгоритм описанный в посте 29, для 25 слагаемых и 7-значной суммы работает шустро. Спасибо за код&#33;]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314517</guid>
        <pubDate>Tue, 21 May 2013 07:41:16 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314517</link>
        <description><![CDATA[MBo: сложность перебора 2^N<br>динамического программирования N * Sum<br>Вот, исходя из параметров, и надо выбирать метод.<br><br>Если разброс значений существенный, то еще можно с помощью ДП по округленным значениям и уменьшенной сумме найти вероятные решения, затем проверить их.]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314500</guid>
        <pubDate>Tue, 21 May 2013 07:17:20 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314500</link>
        <description><![CDATA[Rate93: &gt;Кстати, какое реальное количество?<br><br>Возможно и больше 20, а что тогда посоветуете? Есть ли такие решения?]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314490</guid>
        <pubDate>Tue, 21 May 2013 06:53:51 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314490</link>
        <description><![CDATA[MBo: &gt;слагаемых любое количество.<br>Кстати, какое реальное количество?<br>Если в пределах двух десятков, то будет быстрее перебрать все 2^N вариантов, поскольку динамическое программирование медленно будет работать для большой суммы]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314465</guid>
        <pubDate>Tue, 21 May 2013 05:43:32 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314465</link>
        <description><![CDATA[MBo: &gt;Тогда можно использовать алгоритм Swetlana для подбора гирь?<br>В общем, да.<br><br>В этой ветке используются несколько усложненные алгоритмы для приближённого подбора.<br>Для точного подбора достаточно &quot;задачи о наборе суммы&quot;]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314437</guid>
        <pubDate>Tue, 21 May 2013 02:54:17 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314437</link>
        <description><![CDATA[Rate93: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3314436'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MBo &#064; <time class="tag-quote__quoted-time" datetime="2013-05-21T02:39:14+00:00">21.05.13, 02:39</time></span><div class='quote '></div></div><br>
<br>
&gt;Какая именно?<br>
<br>
Есть числа:<br>
<br>
2 446,721 <br>
1 251,340<br>
464,372 <br>
543,595<br>
<br>
Нужно узнать какие из них составляют заданное число 1794,935. Решение всегда есть 100% и оно единственное, точность 0, слагаемых любое количество.<br>
<br>
&gt;числа из примера можно умножить на 1000<br>
Спасибо, это вроде упрощает жизнь. Тогда можно использовать алгоритм Swetlana для подбора гирь?]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314436</guid>
        <pubDate>Tue, 21 May 2013 02:39:14 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314436</link>
        <description><![CDATA[MBo: &gt;У меня есть аналогичная задача<br>Какая именно?<br><br>&gt;но числа не целые<br>числа из примера можно умножить на 1000]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314433</guid>
        <pubDate>Tue, 21 May 2013 01:52:46 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3314433</link>
        <description><![CDATA[Rate93: Здравствуйте&#33; Почитал разных тем. Понял что задача распространённая. У меня есть аналогичная задача, но числа не целые. Нашёл кучу скриптов и макросов под Excel, работают хорошо, но мне под с++ надо ((. Помогите пожалуйста чем нибудь, лучше примером. Алгоритмы с целыми числами смотрел, но я так понимаю они мне не подходят.<br><br>Вот один из примеров:<br><br>2 446,721 			<br>1 251,340 			1794,935<br>464,372 			<br>543,595 			<br><br>Решение всегда есть 100% и оно единственное, точность 0, слагаемых любое количество.]]></description>
        <author>Rate93</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3307281</guid>
        <pubDate>Mon, 29 Apr 2013 18:48:46 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3307281</link>
        <description><![CDATA[Swetlana: если ДП будет тормозить<br>1. вначале наиболее крупные слагаемые раскидать по набираемым суммам, чтобы значительно их уменьшить<br>2. добирать остатки ДП]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3307159</guid>
        <pubDate>Mon, 29 Apr 2013 14:19:14 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3307159</link>
        <description><![CDATA[Swetlana: вот ещё одна задачка на набор сумм или одномерную упаковку<br>надо сделать постановку задачи<br><br>Имеется n предметов положительной вещественной стоимости (рубли-копеки, вообще говоря).<br>Имеется m контейнеров, m-1 контейнер положительной вместимости, m - безразмерный, m&gt;=3. <br>Размерность большая. Предметов примерно 200, суммы большие.<br>Что нового - контейнеры с приоритетами. Пусть они упорядочены по убыванию приоритетов.<br> <br>1. Можно назначить контейнерам какие-то веса и минимизировать взвешенную сумму отклонений. Вопрос - как приписать веса.<br>2. Можно набирать по отдельности, начиная с самой приоритетной суммы, но тут можно здорово промахнуться.<br>Какие ещё идеи?]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3260077</guid>
        <pubDate>Fri, 11 Jan 2013 06:04:55 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3260077</link>
        <description><![CDATA[Swetlana: поняла, что неправильно сделала постановку задачи<br> :( сори <br><br>в этой задаче надо минимизировать количество операций с документами, чего максимальный поток не делает<br>подумаю на досуге...]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3245204</guid>
        <pubDate>Tue, 04 Dec 2012 16:24:29 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3245204</link>
        <description><![CDATA[Swetlana: У вас вообще 3 варианта исходных задач.<br>1. Суммарный избыток = суммарная недостача. Алгоритм полностью восполняет недостачу, убирает избыток.<br>2. Суммарный избыток &gt; суммарная недостача. Недостача устранена, остаток избытка остался.<br>3. Суммарный избыток &lt; суммарная недостача. Избыток устранен, остаток недостачи остался. <br><br>Вы же понимаете, что решение не единственно, алгоритм построения максимального потока предлагает одно из возможных решений. :) <br>Если вы минимизируете количество операций с документами, то делайте &quot;предобработку&quot; - находите 2 документа типа<br>недостача = избытку и погашайте их сами. А когда таких документов не останется, запускайте построение максимального потока.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3245190</guid>
        <pubDate>Tue, 04 Dec 2012 15:25:48 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3245190</link>
        <description><![CDATA[Spacer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3241294'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2012-11-23T14:42:16+00:00">23.11.12, 14:42</time></span><div class='quote '>тогда всё решается быстро и точно алгоритмом построения максимального потока в сети</div></div><br>
Наконец-то дошли руки попробовать решить мою задачу алгоритмом построения максимального потока в сети.<br>
Воспользовался методом фаз Диница. И все вроде бы хорошо, но не совсем.<br>
<br>
В моей задаче бывают случаи что среди документов с излишками и документов с недостачами встречаются документы с одинаковыми суммами.<br>
Вполне логично было бы взять и сразу закрыть их друг на друга.<br>
Но при решении задачи алгоритмом построения максимального потока в сети этого не происходит. Может я слишком многого хотел? :D <br>
Документы с одинаковыми суммами не закрываются один на другой.<br>
<br>
Наверное выход из этой ситуации - предварительно находить и закрывать такие документы, а уже потом для оставшихся искать решение алгоритмом построения максимального потока в сети.]]></description>
        <author>Spacer</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241294</guid>
        <pubDate>Fri, 23 Nov 2012 14:42:16 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241294</link>
        <description><![CDATA[Swetlana: тогда всё решается быстро и точно алгоритмом построения максимального потока в сети<br>
я всегда пользуюсь для этого методом фаз Диница<br>
<br>
Вначале нужно сделать сетевую постановку задачи, то есть построить граф, на котором всё будет происходить.<br>
<br>
1. Отмечаем вершину-фиктивный источник s0, из него поток выходит. <br>
2. Пусть у вас K документов с излишками. Берём ещё K вершин s1, ...,sk.<br>
Соединяем фиктивный источник s0 с вершинами si, i=1..K. <br>
Полагаем пропускную способность дуги s0-&gt;si C[s0, si] равной излишку i-го документа.<br>
3. Отмечаем вершину фиктивный сток t0, в него поток приходит. <br>
4. Пусть у вас R документов с недостачей. Берём ещё R вершин t1, ...,tr.<br>
Соединяем вершины tj, j=1..R c фиктивным стоком t0. <br>
Полагаем пропускную способность дуги tj-&gt;t0 C[tj, t0] равной недостаче j-го документа.<br>
5. Соединяем каждую вершину-источник si со всеми вершинами-стоками tj, i=1..K; j=1..R.<br>
Пропускные способности получившихся дуг полагаем равными +бесконечности.<br>
<br>
Сеть построена. Теперь стандартным алгоритмом строим в сети максимальный поток из s0 в t0.<br>
Величина потока в дугах s0-&gt;si - сколько надо забрать с i-го документа.   <br>
Величина потока в дугах tj-&gt;t0 - сколько надо добавить к j-му документу.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241284</guid>
        <pubDate>Fri, 23 Nov 2012 14:15:48 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241284</link>
        <description><![CDATA[Spacer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3241278'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2012-11-23T14:06:05+00:00">23.11.12, 14:06</time></span><div class='quote '>скажите, можно ли &quot;излишек&quot; с одного документа разделить на несколько документов с &quot;недостачей&quot;?</div></div><br>
Да, можно. Я в принципе так и делаю. Вначале создаю массив из сумм документов с излишками.<br>
После подбора решения для первого документа с недостачей корректирую массив  из сумм документов с излишками и использую его при подборе решения для следующего документа с недостачей.]]></description>
        <author>Spacer</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241278</guid>
        <pubDate>Fri, 23 Nov 2012 14:06:05 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241278</link>
        <description><![CDATA[Swetlana: <strong class='tag-b'>Spacer</strong>, <br>
скажите, можно ли &quot;излишек&quot; с одного документа разделить на несколько документов с &quot;недостачей&quot;?<br>
Например, документ1 - излишек 110 рублей.<br>
документ2 - недостача 40 рублей, документ3 - недостача 60 рублей.<br>
Решение: перебрасываем  60р. с документа1 на документ3 и 40р на документ2.<br>
на документ1 остаётся излишек 10р., документы 2 и 3 - по нулям.<br>
<br>
Если так можно, то задача решается точным алгоритмом построения максимального потока  :)]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241195</guid>
        <pubDate>Fri, 23 Nov 2012 12:34:55 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241195</link>
        <description><![CDATA[Spacer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3241079'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2012-11-23T09:38:52+00:00">23.11.12, 09:38</time></span><div class='quote '>у вас какая-то другая задача, сформулируйте, что конкретно вы хотите</div></div><br>
У меня задача такая:<br>
В программе ведется учет взаиморасчетов в разрезе расчетных документов.<br>
В результате отступления от норм такого учета получается так что по одним расчетным документам остается висеть лишняя положительная сумма,<br>
а по другим документам недостача - отрицательная сумма.<br>
Нужно недостачу закрыть излишками, перебросив суммы с одних расчетных документов на другие.<br>
Я для каждого документа где есть недостача хочу подобрать документы с излишком на нужную сумму.<br>
Т.е. идеальный вариант - точно подобрать документы с излишками на заданную сумму.<br>
Если не удается подобрать точно - найти решение с избытком с минимальным отклонением.<br>
Если и это не удалось - получить решение с недостатком с минимальным отклонением.]]></description>
        <author>Spacer</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241079</guid>
        <pubDate>Fri, 23 Nov 2012 09:38:52 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241079</link>
        <description><![CDATA[Swetlana: в #39 вы написали &quot;набор сумм&quot;, поэтому и уточнила<br>
<br>
слагаемые 1870, 2000, 2000; допустимое отклонение 2341<br>
из двух вариантов 2000 (с недостатком, отклонение 341) и 3870 (с избытком, отклонение 1870) <br>
программа выводит решение <strong class='tag-b'>с минимальным отклонением</strong><br>
<br>
у вас какая-то другая задача, сформулируйте, что конкретно вы хотите]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241051</guid>
        <pubDate>Fri, 23 Nov 2012 09:09:56 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3241051</link>
        <description><![CDATA[Spacer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3240837'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2012-11-22T16:23:02+00:00">22.11.12, 16:23</time></span><div class='quote '>дайте набор данных</div></div><br>
Набор данных: 1870, 2000, 2000. Нужно подобрать сумму 2341.]]></description>
        <author>Spacer</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240846</guid>
        <pubDate>Thu, 22 Nov 2012 16:51:07 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240846</link>
        <description><![CDATA[MBo: Алгоритм находит ближайшее решение - на таких данных решение с недостатком оказывается ближе - вот оно и выводится. Если требуется только решение с избытком, то и надо ограничить просмотр только нужной областью. Навскидку это будет:<br>
for j:=Ves downto <s class='tag-s'>1</s> Ves0]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240837</guid>
        <pubDate>Thu, 22 Nov 2012 16:23:02 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240837</link>
        <description><![CDATA[Swetlana: дайте набор данных]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240824</guid>
        <pubDate>Thu, 22 Nov 2012 15:49:52 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3240824</link>
        <description><![CDATA[Spacer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=2964049'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2011-08-16T19:23:15+00:00">16.08.11, 19:23</time></span><div class='quote '>Новая версия программы. Нужно набрать 25, допустимое отклонение 2, ближайшее решение с недостатком - 22, ближайшее решение с избытком - 26, которое и выводится на печать.</div></div><br>
Добрый день&#33;<br>
Я как и Сержик программист по 1С.<br>
Запрограммировал этот алгоритм на 1С. Но натолкнулся на случай когда алгоритм не дает ближайшее решение с избытком.<br>
Тестовые данные простейшие. Набор сумм: 1870, 2000, 2000. Нужно подобрать сумму 2341. Допустимое отклонение установил тоже 2341.<br>
В качестве решения была подобрана одна сумма: 2000. Т.е. сумма получается с недостатком, а не с избытком.<br>
Думал что это я неправильно перевел алгоритм на 1С. Попросил исходники которые писал Сержик.<br>
На его исходниках получается тоже самое. В чем может быть проблема?]]></description>
        <author>Spacer</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075679</guid>
        <pubDate>Thu, 09 Feb 2012 14:37:58 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075679</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3075496'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>dmdv &#064; <time class="tag-quote__quoted-time" datetime="2012-02-09T09:12:13+00:00">09.02.12, 09:12</time></span><div class='quote '>Отличие задачи о рюкзаке в том, что в ней - только сложение. В это задаче можно использовать * : + - и скобки.</div></div><br>
Так вот это различие мешает использовать методы динамического программирования. Более того, оно же, в общем случае, мешает подобрать эвристику для ограничения поиска]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075496</guid>
        <pubDate>Thu, 09 Feb 2012 09:12:13 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075496</link>
        <description><![CDATA[dmdv: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=3075341'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2012-02-09T01:35:00+00:00">09.02.12, 01:35</time></span><div class='quote '>Эта задача почти ничего общего с описанной выше не имеет.<br>
Подозреваю, что в общем случае решается только перебором.</div></div><br>
Тогда подробнее:<br>
<br>
Необходимо построить выражение, значение которого будет целое число, объединяя 1 или более чисел из последовательности, используя операции сложение, вычитание, умножение, деление и скобки. Каждое число может быть использовано только 1 раз, все участвующие в расчете цифры, включая промежуточные значения, должны быть положительными натуральными числами.<br>
<br>
Отличие задачи о рюкзаке в том, что в ней - только сложение. В это задаче можно использовать * : + - и скобки.<br>
<br>
Ну, так значит, перебор?]]></description>
        <author>dmdv</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075405</guid>
        <pubDate>Thu, 09 Feb 2012 06:17:40 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075405</link>
        <description><![CDATA[Swetlana: Раз уж подняли старую тему...<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=2963522'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сержик &#064; <time class="tag-quote__quoted-time" datetime="2011-08-16T12:50:14+00:00">16.08.11, 12:50</time></span><div class='quote '>Так вот, возникает еще такая задача:<br>
на валу располагаются несколько ножей одновременно, т.е. рулон распускается на несколько полос(штрипсов) за один проход. Ширины полос задаются заказчиком и набираются при помощи тех же втулок как можно ближе к требуемым(можно не только слева, но и справа). Тут уж точно ДП не отделаешься?</div></div><br>
<br>
Задача хорошо решается методом локального поиска Hill Climber. Хорошо значит точно и быстро.<br>
Из статьи моего студента :) <br>
<br>
Практическое применение алгоритма. Рассмотрим реальный пример. Стальной лист одновременно разрезается на несколько полос (штрипсов). Расстояние между резаками настраивается при помощи конечного набора втулок разной длины. Примем, что разрезаемый лист всегда шире суммарной ширины полос и нет необходимости минимизировать остатки. Таким образом, вместимость контейнеров равна ширине полос, а веса предметов равны длинам втулок. ...<br>
С реализацией алгоритма Hill Climbing была проведена серия тестов с различным числом контейнеров m и предметов n. Проверялась скорость работы t, а так же минимальное min и максимальное max отклонение набранного веса от вместимости при фиксированном количестве начальных решений, равном 1000.<br>
<span class="b-attach" data-size="49624" data-hits="676" data-attach-id="15957" data-attach-post-id="3075405">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3075405&amp;attach_id=15957' title='Скачать файл' target='_blank'>_______1.JPG</a> (, : 676)
		</span>]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075366</guid>
        <pubDate>Thu, 09 Feb 2012 04:10:21 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075366</link>
        <description><![CDATA[Swetlana: Из трамвайного билета число 100 пытаетесь получить, расставляя знаки арифметических операций?<br>Но там важен порядок чисел, и каждое число обязательно используется ровно один раз.<br>В любом случае не знаю других способов, кроме перебора.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075341</guid>
        <pubDate>Thu, 09 Feb 2012 01:35:00 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075341</link>
        <description><![CDATA[amk: Эта задача почти ничего общего с описанной выше не имеет.<br>Подозреваю, что в общем случае решается только перебором.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075334</guid>
        <pubDate>Thu, 09 Feb 2012 00:01:59 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3075334</link>
        <description><![CDATA[dmdv: Помогите формализовать.<br><br>Из заданного набора натуральных чисел найти N, причем допускаются операции сложения/вычитания, умножения, вычитания.<br>Из набора каждое число может участвовать только один раз.]]></description>
        <author>dmdv</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3031597</guid>
        <pubDate>Thu, 24 Nov 2011 16:24:18 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=3031597</link>
        <description><![CDATA[Swetlana: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=2963522'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сержик &#064; <time class="tag-quote__quoted-time" datetime="2011-08-16T12:50:14+00:00">16.08.11, 12:50</time></span><div class='quote '>Так вот, возникает еще такая задача:<br>
на валу располагаются несколько ножей одновременно, т.е. рулон распускается на несколько полос(штрипсов) за один проход. Ширины полос задаются заказчиком и набираются при помощи тех же втулок как можно ближе к требуемым(можно не только слева, но и справа). Тут уж точно ДП не отделаешься?</div></div><br>
Не отделаешься.<br>
Набор двух сумм (разделить камни на 3 кучки равного веса) не решается за псевдополиномиальное время<br>
http://en.wikipedia.org/wiki/Partition_problem]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2976833</guid>
        <pubDate>Thu, 01 Sep 2011 09:41:45 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2976833</link>
        <description><![CDATA[Swetlana: Задача о наборе суммы минимальным числом заданных слагаемых тоже решается ДП.<br>
Подробности здесь, сообщения №5 и №14 <br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=339382#' target='_blank'>Набор суммы минимальным числом слагаемых</a>]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2964510</guid>
        <pubDate>Wed, 17 Aug 2011 10:34:41 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2964510</link>
        <description><![CDATA[Swetlana: Если допустимое отклонение не задано, то делаем так.<br>1. Устанавливаем D=0, находим решение с недостатком, запоминаем dmin - отклонение от заданной суммы.<br>2. Запускаем ещё раз с D=dmin-1. Если существует лучшее решение с избытком, оно будет найдено.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2964049</guid>
        <pubDate>Tue, 16 Aug 2011 19:23:15 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2964049</link>
        <description><![CDATA[Swetlana: Для задачи с одной полосой.<br>
В новой постановке ширину можно набирать хоть с недостатком, хоть с избытком, лишь бы отклонение от заданной суммы было минимальным. Для этого вводим допустимое отклонение D - насколько ширина полосы может отклониться от требований заказчика.<br>
Ves0 - требуемая сумма, Ves=Ves0+D - максимально возможная сумма.<br>
С помощью ДП набираем Ves, затем просматриваем набранные сумму и выбираем сумму с минимальным абсолютным отклонением. <br>
<br>
Сортировка слагаемых в порядке убывания улучшает решение, но это не минимальное число слагаемых.<br>
<br>
Новая версия программы. Нужно набрать 25, допустимое отклонение 2, ближайшее решение с недостатком - 22, ближайшее решение с избытком - 26, которое и выводится на печать.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const N=4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves0=25;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D=2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;M: array[1..N]of integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T:array[0..N,0..Ves0+D]of byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves,sum,i,j,dmin:integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ves:=Ves0+D;</div><div class="code_line">&nbsp;&nbsp; &nbsp;M[1]:= 18; M[2]:= 4; M[3]:= 4; M[4]:= 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T[0,0]:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j := 1 to Ves do T[0, j] := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 1 to &nbsp;N do T[i, 0] := 1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 1 to N do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for j := 1 to Ves do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if j &#62;= M[i] then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if &nbsp;T[i - 1, j]&#62; T[i - 1, j - M[i]] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T[i,j]:= T[i - 1, j]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else T[i, j]:= T[i - 1, j - M[i]];end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else T[i, j]:= T[i - 1, j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dmin:=Ves; sum:=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j:=Ves downto 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if T[N, j] = 1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if dmin&#62;abs(Ves0-j) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin dmin:=abs(Ves0-j); sum:=j; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(&#39;Sum=&#39;,sum,&#39; dmin=&#39;,dmin);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := N downto 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if T[i, sum] = T[i - 1, sum] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeln (i, &#39;---No&#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin writeln (i, &#39; &nbsp; &#39;,M[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum := sum - M[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;readln;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end.</div></ol></div></div></div></div>]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963522</guid>
        <pubDate>Tue, 16 Aug 2011 12:50:14 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963522</link>
        <description><![CDATA[Сержик: Так просто?&#33; Щаз прогоню на реальных объемах. В ТЗ вам нужны конкретные цифры?<br>
Спасибо&#33;&#33;&#33;<br>
Но эта задача - частный случай более глобальной проблемы... <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2011-08-16T13:25:11+00:00">16.08.11, 13:25</time></span></span><br>
Да, гораздо лучше&#33; :good: <br>
Так вот, возникает еще такая задача:<br>
на валу располагаются несколько ножей одновременно, т.е. рулон распускается на несколько полос(штрипсов) за один проход. Ширины полос задаются заказчиком и набираются при помощи тех же втулок как можно ближе к требуемым(можно не только слева, но и справа). Тут уж точно ДП не отделаешься?]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963488</guid>
        <pubDate>Tue, 16 Aug 2011 12:35:31 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963488</link>
        <description><![CDATA[Swetlana: Готово дело :) <br>Сортируйте входные данные в порядке убывания. Это будет не обязательно самое минимальное число слагаемых, но близко к минимальному.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963483</guid>
        <pubDate>Tue, 16 Aug 2011 12:34:48 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963483</link>
        <description><![CDATA[Сержик: Да, можно и так сказать. Не уезжайте может пока? ;) А то я тут весь в прокате, вопросов море...]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963460</guid>
        <pubDate>Tue, 16 Aug 2011 12:23:24 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963460</link>
        <description><![CDATA[Swetlana: <strong class='tag-b'>Сержик</strong>, т.е. если существует несколько наборов с одинаковой точностью, то нужен набор с минимальным числом слагаемых, так?<br>
Надо было сразу сказать, а то я в Чехию чемодан укладываю, а задача хорошая, листопрокатная :)]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963439</guid>
        <pubDate>Tue, 16 Aug 2011 12:10:26 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963439</link>
        <description><![CDATA[Сержик: Нет, просто резчикку очевидно удобнее обойтись 3-мя, а не 50-ю. При прочих равных, разумеется.]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963426</guid>
        <pubDate>Tue, 16 Aug 2011 12:04:13 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963426</link>
        <description><![CDATA[MBo: Есть ли реальные ограничения на количество используемых втулок?]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963026</guid>
        <pubDate>Tue, 16 Aug 2011 09:00:58 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2963026</link>
        <description><![CDATA[Сержик: Перевел на 1С, потестил на своих реальных немаленьких массивах, решение находится, весьма точно и за реальное время, все замечательно&#33;  :good: Но есть нюанс... В решение попадают самые маленькие числа в первую очередь, до больших дело порой не доходт... Мне же нужно наоборот. Скажем, в моем примере 11 выдает как 3+4+4, а мне нужно 7+4. <br>Объясню проблему. <br>Есть линия продольной резки рулонного металла. Из рулона надо вырезать полосу ширины, заданной заказчиком. Эта ширина набирается с помощью втулок, располагаемых на валу между двумя ножами. Всего порядка 8 видов(ширин) втулок, разного количества каждого вида, всего их более 90. Так вот порой вместо очевидного решения из 3 широких втулок мне высыпает порядка 50 мелочью. Боюсь, резчик меня не поймет... Можно ли как-то модифицировать алгоритм?]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961520</guid>
        <pubDate>Sun, 14 Aug 2011 17:54:04 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961520</link>
        <description><![CDATA[amk: Если прикидывать вручную, то суммы, которые можно набрать используя числа последовательно<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp;0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9</div><div class="code_line">&nbsp;&nbsp;*</div><div class="code_line">3 * &nbsp; &nbsp; *</div><div class="code_line">4 * &nbsp; &nbsp; * * &nbsp; &nbsp; *</div><div class="code_line">4 * &nbsp; &nbsp; * * &nbsp; &nbsp; * * &nbsp; &nbsp; *</div><div class="code_line">7 * &nbsp; &nbsp; * * &nbsp; &nbsp; * * &nbsp; * * &nbsp; &nbsp; * * &nbsp; &nbsp; *</div></ol></div></div></div></div><br>
Каждая следующая строка получается сдвигом предыдущей на соответствующее расстояние и объединением с ней. Только не уверен, что это ДП. Если нужно получить, из каких конкретно слагаемых можно составить сумму, можно табличку разметить:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp;0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9</div><div class="code_line">&nbsp;&nbsp;0</div><div class="code_line">3 0 &nbsp; &nbsp; 1</div><div class="code_line">4 0 &nbsp; &nbsp; 1 2 &nbsp; &nbsp; 2</div><div class="code_line">4 0 &nbsp; &nbsp; 1 2 &nbsp; &nbsp; 2 3 &nbsp; &nbsp; 3</div><div class="code_line">7 0 &nbsp; &nbsp; 1 2 &nbsp; &nbsp; 2 3 &nbsp; 4 3 &nbsp; &nbsp; 4 4 &nbsp; &nbsp; 4</div></ol></div></div></div></div><br>
Тогда можно получить что <br>
8 - a[3] = 4; 4 - a[2] = 0<br>
10 - a[4] = 3; 3 - a[1] = 0]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961499</guid>
        <pubDate>Sun, 14 Aug 2011 17:18:58 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961499</link>
        <description><![CDATA[Swetlana: Молодец, Сержик, +1 :D <br>
Баг в программе. Щас исправлю старое сообщение, потом в этом отпишу, в чём ошибка.<br>
<br>
В программе баг находился в строчке<br>
for i := 1 to  N do T[i, 0] := 0;<br>
Правильно<br>
for i := 1 to  N do T[i, 0] := <span class="tag-color tag-color-named" data-value="red" style="color: red">1</span>;<br>
Нулевой вес всегда можно набрать, при любом количестве предметов, поэтому функция T принимает значение 1.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961497</guid>
        <pubDate>Sun, 14 Aug 2011 17:17:55 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961497</link>
        <description><![CDATA[Сержик: Буду весьма признателен&#33; Бьюсь уже давно... Я абсолютно согласн с Вами, что здесь не нужен рюкзак. Задача, кстати, абсолютно практическая. Поэтому спасибо заранее за помощь&#33;]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961490</guid>
        <pubDate>Sun, 14 Aug 2011 17:04:55 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961490</link>
        <description><![CDATA[Swetlana: Ага, не работает :( <br>Нужно вспоминать и разбираться, т.к. вообще-то ДП не пользуюсь.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961486</guid>
        <pubDate>Sun, 14 Aug 2011 16:48:51 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961486</link>
        <description><![CDATA[Сержик: Да, программу на паскале с динамическим программированием.<br>Простейший пример: массив 3 4 4 7(N=4), надо набрать поближе к 9.<br>Получим 7, а надо бы 8... В таблице T получаем две одинаковых строки(i=2,3)...]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961485</guid>
        <pubDate>Sun, 14 Aug 2011 16:31:50 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961485</link>
        <description><![CDATA[Swetlana: <strong class='tag-b'>Сержик</strong>, вы какой алгоритм имеете в виду? программу на паскале с динамическим программированием?<br>
Приведите набор исходных данных, на котором она не работает]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961474</guid>
        <pubDate>Sun, 14 Aug 2011 16:15:47 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2961474</link>
        <description><![CDATA[Сержик: Спасибо огромнейшее, Светлана, за алгоритм&#33;  :good:  Вот только если в массиве есть одинаковые числа, он не работает... :( Может подскажете выход?]]></description>
        <author>Сержик</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666339</guid>
        <pubDate>Wed, 11 Aug 2010 05:49:56 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666339</link>
        <description><![CDATA[Swetlana: Вот лекции Котова, стр.17, пример №1 &quot;Имеется 5 неделимых предметов...&quot;<br>
<br>
<span class="b-attach" data-size="610304" data-hits="4072" data-attach-id="378" data-attach-post-id="2666339">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=2666339&amp;attach_id=378' title='Скачать файл' target='_blank'>Лекции_Котова_по_ДП.doc</a> (, : 4072)
		</span><br>
<br>
Там есть опечатка, на стр.17 :) <br>
Написано<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>T(i,0)=0 при i&#8805;1. {всегда можно набрать нулевую массу}</div></div><br>
<br>
А должно быть<br>
T(i,0)=<span class="tag-color tag-color-named" data-value="red" style="color: red">1</span> при i&#8805;1. {всегда можно набрать нулевую массу}<br>
<br>
И, соответственно, в коде нужно исправить<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>for i := 1 to  5 do T[i, 0] := 0;</div></div><br>
на<br>
for i := 1 to  5 do T[i, 0] := <span class="tag-color tag-color-named" data-value="red" style="color: red">1</span>;]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666335</guid>
        <pubDate>Wed, 11 Aug 2010 05:45:45 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666335</link>
        <description><![CDATA[Swetlana: Готово дело :) <br>
Тестовый пример топикстартёра. Набираем вес 90, но в ответе ближайшая сумма - 89.<br>
Немного переделала прожку из Котова &quot;Лекции по динамическому программированию&quot;.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const N=5;</div><div class="code_line">Ves=90;</div><div class="code_line">var</div><div class="code_line">M: array[1..N]of integer;</div><div class="code_line">T:array[0..N,0..Ves]of byte;</div><div class="code_line">sum,i,j:integer;</div><div class="code_line">begin</div><div class="code_line">M[1]:= 35; M[2]:= 30; M[3]:= 17; M[4]:= 13;</div><div class="code_line">M[5]:= 11;</div><div class="code_line">T[0,0] := 1;</div><div class="code_line">for j := 1 to Ves do T[0, j] := 0;</div><div class="code_line">for i := 1 to &nbsp;N do T[i, 0] := 1;</div><div class="code_line">&nbsp;</div><div class="code_line">for i := 1 to N do begin</div><div class="code_line">&nbsp;&nbsp;for j := 1 to Ves do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;if j &#62;= M[i] then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if &nbsp;T[i - 1, j]&#62; T[i - 1, j - M[i]] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; T[i,j]:= T[i - 1, j]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;else T[i, j]:= T[i - 1, j - M[i]];end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else T[i, j]:= T[i - 1, j];</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">for j:=Ves downto 1 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;sum:=j;</div><div class="code_line">&nbsp;&nbsp;if T[N, j] = 1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i := N downto 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if T[i, sum] = T[i - 1, sum] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writeln (i, &#39;---No&#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else begin writeln (i, &#39;---Yes&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sum := sum - M[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">readln;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666318</guid>
        <pubDate>Wed, 11 Aug 2010 05:19:29 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666318</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=2666313'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2010-08-11T05:06:00+00:00">11.08.10, 05:06</time></span><div class='quote '>у суммы и рюкзака питасы разные, у суммы для той же точности она побыстрее будет. </div></div><br>
ИМХО если чистка кода для рюкзака выполнена <span class='tag-u'>верно и полностью</span> - он просто обязан превратиться в код для суммы.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666313</guid>
        <pubDate>Wed, 11 Aug 2010 05:06:00 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666313</link>
        <description><![CDATA[Swetlana: Благодаря топикстартёру пишу (для себя, конечно :) ) набор суммы дин. программированием. Почти дописала.<br><br>Почему я так бьюсь за то, что нужно решать не как рюкзак. Если веса отдельных элементов и, соответственно B очень большие, то для такой задачи нужна PTAS - полиномиальная апроксимационная схема. У которой чем меньше погрешность, тем больше время. А у суммы и рюкзака питасы разные, у суммы для той же точности она побыстрее будет.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666309</guid>
        <pubDate>Wed, 11 Aug 2010 05:00:51 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666309</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=310469&view=findpost&p=2666251'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Swetlana &#064; <time class="tag-quote__quoted-time" datetime="2010-08-10T20:57:17+00:00">10.08.10, 20:57</time></span><div class='quote '>Зачем её сводить к более общей задаче, мне не очень понятно. </div></div><br>
Проще найти код (да хоть у википедиков). Прочём переборные коды весьма компактны... и повыкидывать из них всё лишнее.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666287</guid>
        <pubDate>Wed, 11 Aug 2010 03:55:44 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666287</link>
        <description><![CDATA[Pavlovsky: Очень советую реашть задачу псевдополиномиальным алгоритмом.<br>
Скажем, дано 90 сек. Даны кусочки: 35, 30, 17, 13, 11.<br>
<br>
1) Создаешь массив A[90]<br>
<br>
2) Берешь очередное число, скажем 35<br>
<br>
3) Помечаешь A[35]=1<br>
<br>
4) Берешь следующее число, скажем 30<br>
<br>
5) Помечаешь A[30]=1<br>
<br>
6) Перебераешь все элементы массива помеченные единицей и помечаешь A[35+30]=1<br>
<br>
7) И так далее<br>
<br>
<br>
Очень эффективный алгоритм, если в твоем наборе кусочков одну и ту же сумму можно набрать множеством способов. В худшем случае получаешь алгоритм полного перебора.]]></description>
        <author>Pavlovsky</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666251</guid>
        <pubDate>Tue, 10 Aug 2010 20:57:17 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666251</link>
        <description><![CDATA[Swetlana: 1. 10 штук можно сделать перебором, например, алгоритмом с возвратом (бэктрэкинг). <br>
<br>
2. 20 штук тоже перебором можно сделать, но не уложитесь в указанное время. <br>
Нужно делать динамическим программированием. Вычислительная сложность алгоритма O(nB), где n - количество слагаемых, B - набираемая сумма.<br>
<br>
3. Если B - слишком большое, то вначале масштабируют, затем применяют динамическое программирование(Кормен). Метод заключается в уменьшении всех заданных величин s(a) и B в scale раз, где scale – коэффициент масштабирования, и последующим округлением до целого путем отбрасывания дробной части. Величина погрешности полученного таким образом решения не превосходит n*scale.<br>
<br>
Куда махнуть рукой...  Только в сторону Кормена. <br>
В Кормене она называется <strong class='tag-b'>Задача о сумме подмножеств</strong> Может, гуглить не Сумма размеров, а Сумма подмножеств?<br>
Я для такой размерности особо ничего не искала, т.к. у меня размерность была сверхбольшая. Но знаю, что все методы для такой размерности основаны на динамическом программировании, в Кормене этот подход описан.<br>
<br>
to Akina<br>
Рюкзак тоже решается динамическим программированием, сумма размеров - частный случай, класс обеих задач - псевдополиномиальные алгоритмы. Сумма размеров существует как отдельная классическая задача. Зачем её сводить к более общей задаче, мне не очень понятно. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-10T21:08:32+00:00">10.08.10, 21:08</time></span></span><br>
Может, и вправду, для суммы размеров найти труднее, чем для рюкзака. :) <br>
Тогда пособие для студентов МФТИ, там для рюкзака есть схема с масштабированием.<br>
Кузюрин, Фомин<br>
Эффективные алгоритмы и сложность вычислений]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666233</guid>
        <pubDate>Tue, 10 Aug 2010 20:11:50 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666233</link>
        <description><![CDATA[Akina: Ищите рюкзак и считайте вес=стоимость.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666226</guid>
        <pubDate>Tue, 10 Aug 2010 19:52:01 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666226</link>
        <description><![CDATA[Kernel Panic: так и есть, у меня только &quot;вес&quot; есть (время). Если размерностью вы имеете в виду размер массива, то там порядка 10-20 штук. Пишется на яваскрипте, должно уложиться в 0,40 с (а желательно меньше). В инете по &quot;сумме размеров&quot; практического алгоритма особо не нашёл. Не махнёте рукой, где смотреть?]]></description>
        <author>Kernel Panic</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666139</guid>
        <pubDate>Tue, 10 Aug 2010 16:31:37 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666139</link>
        <description><![CDATA[Swetlana: Это <strong class='tag-b'>не задача о рюкзаке</strong>. Рюкзак двупараметрический - вес, стоимость. В задаче о рюкзаке есть ограничение на размер суммарного веса и требуется найти выборку максимальной стоимости.<br>
<br>
Это NP-полная задача &quot;Сумма размеров&quot;. <br>
1. Если размерность &quot;средняя&quot;, то в Кормене описан приближённый алгоритм, на основе динамического программирования, по-моему.<br>
2. Если размерность большая и сверхбольшая, могу дать свой собственный алгоритм, опубликованный в журнале &quot;Мехатроника, автоматизация, управление&quot;. Я им отгружала готовую листопрокатную продукцию, набирала заданный вес пачками известного веса при заданной погрешности.]]></description>
        <author>Swetlana</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666093</guid>
        <pubDate>Tue, 10 Aug 2010 15:02:00 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666093</link>
        <description><![CDATA[esperanto: задача класса нп или п-спейс, не помню точно, можно решать перебором]]></description>
        <author>esperanto</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666008</guid>
        <pubDate>Tue, 10 Aug 2010 13:33:51 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666008</link>
        <description><![CDATA[Kernel Panic: дальше разберусь, спасибо большое&#33;]]></description>
        <author>Kernel Panic</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666002</guid>
        <pubDate>Tue, 10 Aug 2010 13:28:20 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2666002</link>
        <description><![CDATA[Akina: Задача о рюкзаке]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2665995</guid>
        <pubDate>Tue, 10 Aug 2010 13:18:50 +0000</pubDate>
        <title>Сумма чисел в массиве, наиболее приближающаяся к необходимой</title>
        <link>https://forum.sources.ru/index.php?showtopic=310469&amp;view=findpost&amp;p=2665995</link>
        <description><![CDATA[Kernel Panic: По идее должно быть просто, быстрый поиск в инете не дал результатов (не могу сформулировать точно).<br><br>Необходим алгоритм для наиболее полного заполнения времени кусочками заданной длины.<br><br>Скажем, дано 90 сек. Даны кусочки: 35, 30, 17, 13, 11. Если заполнять от больших к малым, получится 35 + 30 + 17 = 82. Эффективнее же было бы: 35 + 30 + 13 + 11 = 89.<br><br>Думаю, задача классическая, если что, скажите название (по-русски/английски), дальше сам разберусь, просто нет времени изобретать велосипед.<br><br>Спасибо.]]></description>
        <author>Kernel Panic</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	