Разложение числа на слагаемы
- From
- Max Alekseyev (2:5015/60)
- To
- Igor Bury
- Date
- 2002-10-29T16:20:08Z
- Area
- RU.ALGORITHMS
████ OS/2 Hi, Igor !
Replying to a message of Igor Bury to Anton Yurchenko:
AY>> Есть целое N (порядка 1000), необходимо все целые числа из 1..N
AY>> представить в виде суммы не более чем двух чисел (то есть можно и
AY>> одним, 7=3+4 и 7=7 - оба корректны). При этом число этих
AY>> "простейших" слагаемых должно быть минимально.
IB> Алгоритм O(N^4) или скорее меньше (лень доказывать):
IB> Создаёшь массив [1..N,0..N] и заполняешь элементы (i,j) числами
IB> (i+j<=N)?i+j:0 (Значение 0 считаем отсутствием значения). После этого
IB> цикл по i от N до 2. Если из массива можно исключить строку i и
IB> столбец i и после этого в нём останутся все числа, находящиеся в этих
IB> столбце и строке, то удаляем строку i и столбец i (помечаем нулями).
IB> Список оставшихся номеров строк и есть ответ.
Результат зависит от порядка исключения, и вовсе не обязан быть минимальным.
Пример: N=8. Массив выглядит так:
12345678
23456780
34567800
45678000
56780000
67800000
78000000
80000000
Ничто не мешает исключить строку и столбец 4. Но если мы это сделаем, то потеряем единственное минимальное решение {1,3,4}.
Regards, °°
Max ~
--- FleetStreet 1.27.3.8
* Origin: (2:5015/60)