Показать сообщение отдельно

  #8  
Старый 17.02.2009, 23:20
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от bigex  
Задание:
Дан массив A[n] , найти наименьшее число элементов которые нужно выкинуть из массива чтобы осталась возрастающая последовательность элементов.
Код:
    class Program
    {
        static void Main(string[] args)
        {
            int[] A = new int[] { 1, 7, 1, 8, 3, 5, 9, 8, 0 };
            int count = calc(A);
            Console.WriteLine(count);
            Console.ReadLine();
        }

        //подсчет минимального числа исключений
        private static int calc(int[] A)
        {
            //пербираем число отбрасываемых элементов
            for (int i = 0; i < A.Length; i++)
            {
                 if(Exclude(A, 0, i, new bool[A.Length]))
                     return i;
            }

            return A.Length;
        }

        //исключение одного элемента
        private static bool Exclude(int[] A, int fromIndex, int excludeCount, bool[] excluded)
        {
            if(excludeCount==0)
                return Check(A, excluded);
            for (int i = fromIndex; i < A.Length; i++)
            {
                excluded[i] = true;
                if(Exclude(A, i + 1, excludeCount - 1, excluded))
                    return true;
                excluded[i] = false;
            }
            return false;
        }

        //проверка на возрастание
        private static bool Check(int[] A, bool[] excluded)
        {
            int prev = int.MinValue;
            for(int i=0;i<A.Length;i++)
            if(!excluded[i])
            {
                if (A[i] <= prev)
                    return false;
                prev = A[i];
            }

            return true;
        }
    }

Последний раз редактировалось Algol; 18.02.2009 в 00:25..
 
Ответить с цитированием