редактирование этот ответ был перед редактированием; для ответа на обновленную проблему см. этот ответ .
, Почему использование LINQ? Существует конструктор для этого:
new SortedDictionary(existing);
Вы могли добавлять ToSortedDictionary
- но я не обеспокоился бы...
Посетите этот сайт: Практические проблемы динамического программирования
Идея динамического программирования заключается в том, что вы кэшируете (запоминаете) решения подзадач, хотя я думаю, что это еще не все.
Есть много проблем с Google Code Jam, например решения требуют динамического программирования, чтобы быть эффективными. Примеры:
Добро пожаловать в Code Jam (умеренный)
Обман логического дерева (средний)
Обратите внимание, что в каждом практическом конкурсе Code Jam есть раздел «Анализ конкурса», если вы в тупике, пытаясь решить проблему.
Расчет расстояний Левенштейна был одним из первых задач, которые я решил с помощью динамического программирования; Я думаю, что это достойный следующий шаг от последовательности Фибоначчи с точки зрения сложности.