Меню

Главная

Статистика

 

 


Пример #2.

Для заданного числа N необходимо определить количество его различных разложений на слагаемые. Два разложения считаются различными, если они отличаются хотя бы одним слагаемым, при этом порядок слагаемых не важен. Так для числа 3 разложения 2+1 и 1+2 считаются одинаковыми.

Для описания пространства подзадач одним из параметров обязано быть величина числа, которое разлагается на слагаемые. Покажем, что другим параметром может быть максимальное слагаемое в разложении числа. Действительно, не умаляя общности можно считать, что слагаемые в разложении упорядочены в порядке не возрастания. Тогда, зафиксировав величину первого слагаемого (например, Р), исходную задачу разложения числа Х можно свести к следующим подзадачам. Для этого, вычтя из Х первое слагаемое, нам достаточно найти количество разложений числа Х-Р на слагаемые, причем в этих разложениях слагаемые не должны превышать Р.

Определим функцию Т(Х,Р), которая соответствует количеству разложений числа Х на слагаемые, причем максимальное слагаемое равно Р. Тогда можно записать следующую рекуррентную формулу
Т(Х,Р)=Т(Х-Р,Р)+Т(Х-Р,Р-1)+...+Т(Х-Р,1).

Смысл этой формулы состоит в том, что первое слагаемое соответствует количеству разложений числа Х-Р на слагаемые, причем максимальное слагаемое в каждом разложении равно Р, что второе слагаемое соответствует количеству разложений числа Х-Р на слагаемые, причем максимальное слагаемое в каждом разложении равно Р-1, и т.д. Понятно, что такие разложения заведомо отличаются друг от друга, что гарантирует правильность суммирования.

Для получения правильного рекуррентного соотношения необходимо определить начальные значения функции. Очевидно, что
Т(i,i)=1, а T(i,j)=0 для i<j.

Решение задачи может быть записано следующим образом.

for i:=0 to N do
 T[i, i] := 1;
for i:=0 to N do
  for j:=i+1 to N do
     T[i,j]:=0;
           for X:=1 to N do
for P:=1 to X-1 do
    begin
         S:=1;
         for i:=P downto 1 do
            S:=S+T[X-P,i]
         T[X,P]:=S;
    End;
S:=0;
for P:=1 to N do
   S:=S+T[N,P];
                


Пример #3.

Имеется N (N<100) дисков одинаковой толщины с радиусами R1, ... , RN. Эти диски упаковываются в коробку таким образом, что каждый из них стоит ребром на дне коробки, и все диски находятся в одной плоскости, как изображено на рисунке 1.

Рис. 1.

Найти минимальную длину коробки, в которую все они могут быть упакованы.

Пример: для 3 дисков с радиусами 2.0, 1.0 и 2.0 минимальная длина равна 9.65685

Для решения поставленной задачи воспользуемся следующими соображениями. Предположим, что уже известно положение центров первых K дисков, при котором каждый следующий упирается в один из предыдущих, и пусть X1, X2,...,XK - эти координаты. При этом можно полагать, что X1=0. Для определения положения центра следующего K+1 диска попробуем "упереть" его в каждый из предыдущих дисков, и пусть координаты X1, X2 ,..., XK определяют соответственно координаты центра K+1 диска, который "упирается" в 1,2,..., K диски. Эти положения центров дисков вычисляются следующим образом:
Xi= Xi+2*SQRT(Ri*RK+1)

Нетрудно понять, что в действительности диск K+1 примет самое "правое" из этих положений, т.е. XK+1=max{X1, X2,...,XK}. Однако было бы ошибочным полагать, что длина искомой коробки равна R1+(XN-X1)+RN.

Для правильного решения задачи для каждого диска определить его левый и правый край следующим образом:
Ldi=Xi-Ri,Rdi= Xi+Ri.

Тогда истинный размер искомой коробки равен L=max{Rdi}-min{Ldi}.

Назад

ixbt psp форум. Очистка вентиляции кондиционеры Daikin, приточная вытяжная вентиляция.. Скачать музыку St1m - Как в первый раз (prod. by Tai Jason) и другие St1m без регистрации. Открываете мойку?! Нужна водоподготовка?! Звоните, поможем!