Dynamic Programming, 动态规划,经典题目及其分类

提到算法,绕不开的重点和难点就肯定会包括DP,本文就把经典的DP问题按照分类列一下,大家可以按照Recursion,Top-Down,Bottom-Up三种方式都练一练。俗话说,熟能生巧,多练才是提高算法的不二法宝。

在educative的Grokking Dynamic Programming Patterns for Coding Interviews课程中, 作者将DP的问题分成以下几类:

1. 0/1 Knapsack, 0/1背包,6个题

0/1 Knapsack
Equal Subset Sum Partition
Subset Sum
Minimum Subset Sum Difference
Count of Subset Sum
Target Sum

2. Unbounded Knapsack,无限背包,5个题

Unbounded Knapsack
Rod Cutting
Coin Change
Minimum Coin Change
Maximum Ribbon Cut

3. Fibonacci Numbers,斐波那契数列,6个题

Fibonacci numbers
Staircase
Number factors
Minimum jumps to reach the end
Minimum jumps with fee
House thief

4. Palindromic Subsequence,回文子系列,5个题

Longest Palindromic Subsequence
Longest Palindromic Substring
Count of Palindromic Substrings
Minimum Deletions in a String to make it a Palindrome
Palindromic Partitioning

5. Longest Common Substring,最长子字符串系列,13个题

Longest Common Substring
Longest Common Subsequence
Minimum Deletions & Insertions to Transform a String into another
Longest Increasing Subsequence
Maximum Sum Increasing Subsequence
Shortest Common Super-sequence
Minimum Deletions to Make a Sequence Sorted
Longest Repeating Subsequence
Subsequence Pattern Matching
Longest Bitonic Subsequence
Longest Alternating Subsequence
Edit Distance
Strings Interleaving

大家可以先把以上35个题目练熟,这样DP到达中等水平肯定是okay了的。再加以训练和提高。突破算法的硬骨头不在话下。一定要按照三种方式对照起来练。

如果需要购买,请参考置顶博客,使用折扣码,获取优惠。

你可能感兴趣的:(自学编程,算法学习)