Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- namespace P05.LongestIncreasingSubsequence
- {
- class LongestIncreasingSubsequence
- {
- static void Main(string[] args)
- {
- int[] numbers = Console.ReadLine()
- .Split(' ', StringSplitOptions.RemoveEmptyEntries)
- .Select(int.Parse)
- .ToArray();
- string previousOutput = string.Empty;
- int[] LIS = new int[0];
- int lengthOfTheLIS = int.MinValue;
- for (int currentNumber = 0; currentNumber < numbers.Length; currentNumber++)
- {
- string currentOutput = numbers[currentNumber].ToString();
- int savedIndexOfCurrentNumber = currentNumber;
- int savedIndex = 0;
- int counter = 0;
- bool counterIsOn = true;
- int lastMaxNumber = currentNumber;
- for (int currentIndex = currentNumber + 1; currentIndex < numbers.Length; currentIndex++)
- {
- if (counterIsOn)
- {
- counter++;
- }
- if (numbers[currentIndex] > numbers[currentNumber])
- {
- previousOutput = currentOutput;
- currentOutput += " " + numbers[currentIndex];
- int[] numbersInTheLIS = currentOutput
- .Split(' ', StringSplitOptions.RemoveEmptyEntries)
- .Select(int.Parse)
- .ToArray();
- if (numbersInTheLIS.Length > lengthOfTheLIS)
- {
- lengthOfTheLIS = numbersInTheLIS.Length;
- LIS = numbersInTheLIS;
- savedIndex = currentIndex;
- }
- lastMaxNumber = currentNumber;
- currentNumber = currentIndex;
- counterIsOn = false;
- continue;
- }
- if (counter == numbers.Length - 1)
- {
- break;
- }
- if (currentIndex == numbers.Length - 1)
- {
- currentNumber = lastMaxNumber;
- currentIndex = savedIndex;
- currentOutput = previousOutput;
- if (lastMaxNumber == savedIndexOfCurrentNumber)
- {
- counterIsOn = true;
- }
- }
- }
- }
- Console.WriteLine(string.Join(' ', LIS));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement