
17.02.2009, 23:20
|
Регистрация: 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..
|
|
|