Есть интересная задача, нужен совет в разработке алгоритма решения.
Задача: Есть массив состоящий из n элементов. Определить минимальное количество элементов которые можно выкинуть при котором массив станет возрастающим.
Вот как я делал:
Решение:
Пусть в переменной $k содержится минимальное количество элементов которые нужно выкинуть.
1 шаг. Убираем слева элементы по условию Если $a[0]>$a[1], то убираем $a[0]; $k++; сдвигаем массив влево.
2 шаг. Убираем справа элементы по условию Если $a[$n-2]>$a[$n-1], то убираем $a[$n-1]; $k++;
3 шаг. Ищем лишние элементы в середине массива по условию "Если ($a[$i-1] > $a[$i]) and ($a[$i]>a[$i+1]), то выкидываем $a[$i]; $k++; сдвигаем массив влево.
4 шаг. После всех удалённых (лишних элементов) получаем массив, где последовательно идут (1, 2, 3 ...) массивов. Пример $a=array(4, 6, 2, 5, 8); => (4, 6) и (2, 5, 8); Определяем самый длинный из массивов упорядоченных по возрастанию и записываем его длину в $t.
$k=$k+(count($a)-$t);
Вроде б всё работало как надо, а тут ввёл массив (1, 3, 2, 5, 8) и ответ получился = 2, хотя достаточно выкинуть только 3, чтобы массив стал возрастающим.
Если есть идеи как доработать алгоритм или есть какой-то другой жажду услышать!
![rolleyes.gif](http://phpforum.su/html/emoticons/rolleyes.gif)