Problem 5. * Longest Non-Decreasing Subsequence
Здравейте. Току що успях да реша тази задача. Гледах немного публикувани решения с рекурсия и т.н, но не видях нещо достъпно, което да работи (достъпно за мен)1. Бих казал, че моето решение не е най-елегантното, защото минава през абсолютно всички комбинации на записаните числа. Това се случва чрез малко побитови операции, което ми дойде на акъла от един subset problem„ решен по подобен начин.
Нека това са числата записани в масив:
1 -1 4 5 10 9 16
0 1 0 1 0 0 0
Записваме в лист само числата, които са представени с 1-ци в бинарния вид.
Проверяваме дали числата са non decreasing sequence, само тях записваме в string, но и броим колко числа записваме:
int num = 0;
int currentcount = 0;
for(int j = 0; j < resultList.Count; j++)
{
if (resultList[j] >= num)
{
str += resultList[j] + " ";
currentcount++;
num = resultList[j];
}
Имаме една var string sequence, която е финална, с дължина lenght = 0. Инициарме я празна, и ако текущият str, с дължина currentCount > lenght, правим sequence = str. Първият път винаги се записва, тъй като дължината и стойността е празна:
if (currentcount > lenght)
{
sequence = str;
lenght = currentcount;
}
След това , чистим листта, чистим current string, и продължаваме следващата комбинация от числа - тя се върти в цикъл започваш от едно, продължаващ до възможният брой комбинации:
int combinations = (int)Math.Pow(2, (input.Length));
Console.WriteLine();
for(int i = 1; i <= combinations; i++)
{
}
Цялото решение тук - http://pastebin.com/Dp2ZVyMj