<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RDmitriy</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RDmitriy"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/RDmitriy"/>
		<updated>2026-05-06T07:23:18Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2_%D0%B2_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8&amp;diff=5499</id>
		<title>Задача о расстановке знаков в выражении</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2_%D0%B2_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8&amp;diff=5499"/>
				<updated>2010-12-03T23:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;RDmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Задача о расстановке знаков в выражении''' — задача о нахождении максимального значения выражения, полученного расстановкой знаков  &amp;lt;tex dpi = &amp;quot;120&amp;quot;&amp;gt;+, \times&amp;lt;/tex&amp;gt; и скобок в последовательности &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;a_1, a_2, \dots, a_n \ (a_i \ge 0)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n \times n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d[i][j]&amp;lt;/tex&amp;gt; будет равен максимальному значению, достигаемому на подотрезке &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;a_i, a_{i+1}, \dots, a_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем следующие соотношения: &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;d[i][i] = a_i &amp;lt;/tex&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;d[i][j] = \max\limits_{\mathop{k = i..j-1}}[\max(d[i][k]+d[k+1][j], d[i][k] \times d[k+1][j])] \ (i &amp;lt; j)&amp;lt;/tex&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Вычислим элементы таблицы &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, тогда ответом на задачу будет значение &amp;lt;tex&amp;gt;d[1][n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
  // d - матрица как в описании; a - последовательность из n элементов; i, j, k - счётчики&lt;br /&gt;
  &lt;br /&gt;
  for i := 1 to n do&lt;br /&gt;
    d[i][i] := a[i];&lt;br /&gt;
  &lt;br /&gt;
  for i := n - 1 downto 1 do&lt;br /&gt;
    for j := i + 1 to n do&lt;br /&gt;
      for k := i to j - 1 do&lt;br /&gt;
        d[i][j] := max(d[i][j], max(d[i][k] + d[k+1][j], d[i][k] * d[k+1][j]));&lt;br /&gt;
  &lt;br /&gt;
  write(d[1][n]); // вывод ответа&lt;br /&gt;
== Пример ==&lt;br /&gt;
Пусть дана последовательность 2, 1, 1, 2. Таблица &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; для неё будет выглядеть так:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || j = 1 || j = 2 || j = 3 || j = 4&lt;br /&gt;
|-&lt;br /&gt;
| i = 1 || 2 || 3 || 4 || 9&lt;br /&gt;
|-&lt;br /&gt;
| i = 2 || 0 || 1 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| i = 3 || 0 || 0 || 1 || 3&lt;br /&gt;
|-&lt;br /&gt;
| i = 4 || 0 || 0 || 0 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Динамическое_программирование Википедия]&lt;/div&gt;</summary>
		<author><name>RDmitriy</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2_%D0%B2_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8&amp;diff=5486</id>
		<title>Задача о расстановке знаков в выражении</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2_%D0%B2_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8&amp;diff=5486"/>
				<updated>2010-12-03T09:16:38Z</updated>
		
		<summary type="html">&lt;p&gt;RDmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Задача о расстановке знаков в выражении''' — задача о нахождении максимального значения выражения, полученного расстановкой знаков  &amp;lt;tex dpi = &amp;quot;120&amp;quot;&amp;gt;+, \times&amp;lt;/tex&amp;gt; и скобок в последовательности &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;a_1, a_2, \dots, a_n \ (a_i \ge 0)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Данная задача решается с использованием принципа оптимальности на подотрезке. Введём матрицу &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n \times n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d[i][j]&amp;lt;/tex&amp;gt; будет равен максимальному значению, достигаемому на подотрезке &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;a_i, a_{i+1}, \dots, a_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем следующие соотношения: &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;tex dpi = &amp;quot;141&amp;quot;&amp;gt;d[i][i] = a_i &amp;lt;/tex&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;d[i][j] = \max_{\mathop{k = i..j-1}}[\max(d[i][k]+d[k+1][j], d[i][k]*d[k+1][j])] \ (i &amp;lt; j)&amp;lt;/math&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Вычислим элементы таблицы &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, тогда ответом на задачу будет значение &amp;lt;tex&amp;gt;d[1][n]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
  // d - матрица как в описании; a - последовательность из n элементов; i, j, k - счётчики&lt;br /&gt;
  &lt;br /&gt;
  for i := 1 to n do&lt;br /&gt;
    d[i][i] := a[i];&lt;br /&gt;
  &lt;br /&gt;
  for i := n - 1 downto 1 do&lt;br /&gt;
    for j := i + 1 to n do&lt;br /&gt;
      for k := i to j - 1 do&lt;br /&gt;
        d[i][j] := max(d[i][j], max(d[i][k] + d[k+1][j], d[i][k] * d[k+1][j]));&lt;br /&gt;
  &lt;br /&gt;
  write(d[1][n]); // вывод ответа&lt;br /&gt;
== Пример ==&lt;br /&gt;
Пусть дана последовательность 2, 1, 1, 2. Таблица &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; для неё будет выглядеть так:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || j = 1 || j = 2 || j = 3 || j = 4&lt;br /&gt;
|-&lt;br /&gt;
| i = 1 || 2 || 3 || 4 || 9&lt;br /&gt;
|-&lt;br /&gt;
| i = 2 || 0 || 1 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| i = 3 || 0 || 0 || 1 || 3&lt;br /&gt;
|-&lt;br /&gt;
| i = 4 || 0 || 0 || 0 || 2&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RDmitriy</name></author>	</entry>

	</feed>