友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

Dynamic Programming 动态规划

动态规划的设计思想:「不是直接面对问题求解,而是从一个最小规模的问题开始,新问的最优解均是由比它规模还小的子问题的最优解转换得到,在求解的过程中记录每一步的结果,直至所要求的问题得到解」。

dynamic programming 01

动态规划的五部曲:

  1. 确定 dp 数组(dp table)以及下标的含义

  2. 确定递推公式

  3. dp 数组如何初始化

  4. 确定遍历顺序

  5. 举例推导 dp 数组

.1. 入门题目

  1. 70. Climbing Stairs

  2. 509. Fibonacci Number

  3. 1137. 第 N 个泰波那契数

  4. 746. 使用最小花费爬楼梯

  5. 198. 打家劫舍

  6. 213. 打家劫舍 II

  7. 337. 打家劫舍 III

  8. 2560. 打家劫舍 IV — 这个不是动态规划题目。

  9. 740. 删除并获得点数

  10. 62. 不同路径

  11. 63. 不同路径 II

  12. 980. 不同路径 III — 这是一道回溯问题。

  13. 64. 最小路径和

  14. 120. 三角形最小路径和

  15. 931. 下降路径最小和

  16. 1289. 下降路径最小和 II

  17. 221. 最大正方形

  18. 5. 最长回文子串

  19. 139. 单词拆分

  20. 140. 单词拆分 II — 这是一道回溯题。

  21. 516. 最长回文子序列

  22. [1682-longest-palindromic-subsequence-ii]

  23. 72. 编辑距离

  24. [0712-minimum-ascii-delete-sum-for-two-strings]

  25. [0115-distinct-subsequences]

  26. [0940-distinct-subsequences-ii]

  27. 300. Longest Increasing Subsequence

  28. [2407-longest-increasing-subsequence-ii]

  29. [0673-number-of-longest-increasing-subsequence]

  30. [0646-maximum-length-of-pair-chain]

  31. [1218-longest-arithmetic-subsequence-of-given-difference]

  32. [1027-longest-arithmetic-subsequence]

  33. [0354-russian-doll-envelopes]

  34. [1964-find-the-longest-valid-obstacle-course-at-each-position]

  35. 1143. 最长公共子序列

  36. [1035-uncrossed-lines]

  37. [1312-minimum-insertion-steps-to-make-a-string-palindrome]

  38. 309. Best Time to Buy and Sell Stock with Cooldown

  39. 714. Best Time to Buy and Sell Stock with Transaction Fee

  40. 123. Best Time to Buy and Sell Stock III

  41. 188. Best Time to Buy and Sell Stock IV

  42. 96. 不同的二叉搜索树

  43. 95. Unique Binary Search Trees II

  44. 124. 二叉树中的最大路径和

  45. 279. Perfect Squares

  46. [0367-valid-perfect-square]

  47. 322. 零钱兑换

  48. [0518-coin-change-ii]

  49. [0377-combination-sum-iv]

  50. 474. 一和零

  51. [2140-solving-questions-with-brainpower]

  52. [2466-count-ways-to-build-good-strings]

  53. 91. Decode Ways

  54. [0639-decode-ways-ii]

  55. [0983-minimum-cost-for-tickets]

  56. [0790-domino-and-tromino-tiling]

.3. 经典题目

  1. 5. 最长回文子串

  2. 10. Regular Expression Matching

  3. 22. Generate Parentheses

  4. 32. 最长有效括号

  5. 42. 接雨水

  6. [0044-wildcard-matching]

  7. 45. Jump Game II

  8. 53. 最大子数组和

  9. 55. Jump Game

  10. 62. 不同路径

  11. 63. 不同路径 II

  12. 64. 最小路径和

  13. 70. Climbing Stairs

  14. 72. 编辑距离

  15. [0085-maximal-rectangle]

  16. [0087-scramble-string]

  17. 91. Decode Ways

  18. 95. Unique Binary Search Trees II

  19. 96. 不同的二叉搜索树

  20. [0097-interleaving-string]

  21. [0115-distinct-subsequences]

  22. 118. Pascal’s Triangle

  23. 119. Pascal’s Triangle II

  24. 120. 三角形最小路径和

  25. 121. 买卖股票的最佳时机

  26. 122. Best Time to Buy and Sell Stock II

  27. 123. Best Time to Buy and Sell Stock III

  28. 124. 二叉树中的最大路径和

  29. 131. 分割回文串

  30. [0132-palindrome-partitioning-ii]

  31. 139. 单词拆分

  32. 140. 单词拆分 II

  33. 152. Maximum Product Subarray

  34. [0174-dungeon-game]

  35. 188. Best Time to Buy and Sell Stock IV

  36. 198. 打家劫舍

  37. 213. 打家劫舍 II

  38. 221. 最大正方形

  39. [0233-number-of-digit-one]

  40. [0241-different-ways-to-add-parentheses]

  41. [0256-paint-house]

  42. [0264-ugly-number-ii]

  43. [0265-paint-house-ii]

  44. [0276-paint-fence]

  45. 279. Perfect Squares

  46. [0294-flip-game-ii]

  47. 300. Longest Increasing Subsequence

  48. 309. Best Time to Buy and Sell Stock with Cooldown

  49. [0312-burst-balloons]

  50. [0313-super-ugly-number]

  51. 322. 零钱兑换

  52. [0329-longest-increasing-path-in-a-matrix]

  53. [0333-largest-bst-subtree]

  54. 337. 打家劫舍 III

  55. 338. Counting Bits

  56. 343. 整数拆分

  57. [0351-android-unlock-patterns]

  58. [0354-russian-doll-envelopes]

  59. [0357-count-numbers-with-unique-digits]

  60. [0361-bomb-enemy]

  61. [0368-largest-divisible-subset]

  62. [0375-guess-number-higher-or-lower-ii]

  63. [0376-wiggle-subsequence]

  64. [0377-combination-sum-iv]

  65. 392. Is Subsequence

  66. [0396-rotate-function]

  67. [0397-integer-replacement]

  68. [0403-frog-jump]

  69. [0410-split-array-largest-sum]

  70. [0413-arithmetic-slices]

  71. 416. 分割等和子集

  72. [0418-sentence-screen-fitting]

  73. [0435-non-overlapping-intervals]

  74. [0446-arithmetic-slices-ii-subsequence]

  75. [0458-poor-pigs]

  76. [0464-can-i-win]

  77. [0465-optimal-account-balancing]

  78. [0466-count-the-repetitions]

  79. [0467-unique-substrings-in-wraparound-string]

  80. [0471-encode-string-with-shortest-length]

  81. [0472-concatenated-words]

  82. [0473-matchsticks-to-square]

  83. 474. 一和零

  84. [0486-predict-the-winner]

  85. [0487-max-consecutive-ones-ii]

  86. [0488-zuma-game]

  87. 494. Target Sum

  88. 509. Fibonacci Number

  89. [0514-freedom-trail]

  90. 516. 最长回文子序列

  91. [0518-coin-change-ii]

  92. [0526-beautiful-arrangement]

  93. [0542-01-matrix]

  94. [0546-remove-boxes]

  95. [0552-student-attendance-record-ii]

  96. [0553-optimal-division]

  97. [0562-longest-line-of-consecutive-one-in-matrix]

  98. [0568-maximum-vacation-days]

  99. [0576-out-of-boundary-paths]

  100. [0583-delete-operation-for-two-strings]

  101. [0600-non-negative-integers-without-consecutive-ones]

  102. [0629-k-inverse-pairs-array]

  103. [0634-find-the-derangement-of-an-array]

  104. [0638-shopping-offers]

  105. [0639-decode-ways-ii]

  106. [0646-maximum-length-of-pair-chain]

  107. 647. Palindromic Substrings

  108. [0650-2-keys-keyboard]

  109. [0651-4-keys-keyboard]

  110. [0656-coin-path]

  111. [0664-strange-printer]

  112. [0673-number-of-longest-increasing-subsequence]

  113. [0678-valid-parenthesis-string]

  114. [0688-knight-probability-in-chessboard]

  115. [0689-maximum-sum-of-3-non-overlapping-subarrays]

  116. [0691-stickers-to-spell-word]

  117. 698. Partition to K Equal Sum Subsets

  118. [0712-minimum-ascii-delete-sum-for-two-strings]

  119. 714. Best Time to Buy and Sell Stock with Transaction Fee

  120. 718. 最长重复子数组

  121. [0727-minimum-window-subsequence]

  122. [0730-count-different-palindromic-subsequences]

  123. 740. 删除并获得点数

  124. [0741-cherry-pickup]

  125. 746. 使用最小花费爬楼梯

  126. [0750-number-of-corner-rectangles]

  127. [0764-largest-plus-sign]

  128. [0773-sliding-puzzle]

  129. [0787-cheapest-flights-within-k-stops]

  130. [0788-rotated-digits]

  131. [0790-domino-and-tromino-tiling]

  132. [0792-number-of-matching-subsequences]

  133. [0799-champagne-tower]

  134. [0801-minimum-swaps-to-make-sequences-increasing]

  135. [0805-split-array-with-same-average]

  136. [0808-soup-servings]

  137. [0813-largest-sum-of-averages]

  138. [0818-race-car]

  139. [0823-binary-trees-with-factors]

  140. [0828-count-unique-characters-of-all-substrings-of-a-given-string]

  141. [0834-sum-of-distances-in-tree]

  142. [0837-new-21-game]

  143. [0838-push-dominoes]

  144. [0845-longest-mountain-in-array]

  145. [0847-shortest-path-visiting-all-nodes]

  146. [0871-minimum-number-of-refueling-stops]

  147. [0873-length-of-longest-fibonacci-subsequence]

  148. [0877-stone-game]

  149. [0879-profitable-schemes]

  150. [0887-super-egg-drop]

  151. [0894-all-possible-full-binary-trees]

  152. [0898-bitwise-ors-of-subarrays]

  153. [0902-numbers-at-most-n-given-digit-set]

  154. [0903-valid-permutations-for-di-sequence]

  155. [0907-sum-of-subarray-minimums]

  156. [0913-cat-and-mouse]

  157. [0918-maximum-sum-circular-subarray]

  158. [0920-number-of-music-playlists]

  159. 926. Flip String to Monotone Increasing

  160. 931. 下降路径最小和

  161. [0935-knight-dialer]

  162. [0940-distinct-subsequences-ii]

  163. [0943-find-the-shortest-superstring]

  164. [0956-tallest-billboard]

  165. [0960-delete-columns-to-make-sorted-iii]

  166. [0964-least-operators-to-express-number]

  167. [0968-binary-tree-cameras]

  168. [0975-odd-even-jump]

  169. [0978-longest-turbulent-subarray]

  170. [0983-minimum-cost-for-tickets]

  171. [0996-number-of-squareful-arrays]

  172. [1000-minimum-cost-to-merge-stones]

  173. [1012-numbers-with-repeated-digits]

  174. [1014-best-sightseeing-pair]

  175. [1024-video-stitching]

  176. [1025-divisor-game]

  177. [1027-longest-arithmetic-subsequence]

  178. [1031-maximum-sum-of-two-non-overlapping-subarrays]

  179. [1035-uncrossed-lines]

  180. [1039-minimum-score-triangulation-of-polygon]

  181. [1043-partition-array-for-maximum-sum]

  182. [1048-longest-string-chain]

  183. 1049. 最后一块石头的重量 II

  184. [1062-longest-repeating-substring]

  185. [1066-campus-bikes-ii]

  186. [1067-digit-count-in-range]

  187. [1092-shortest-common-supersequence]

  188. [1105-filling-bookcase-shelves]

  189. [1125-smallest-sufficient-team]

  190. [1130-minimum-cost-tree-from-leaf-values]

  191. 1137. 第 N 个泰波那契数

  192. [1139-largest-1-bordered-square]

  193. [1140-stone-game-ii]

  194. 1143. 最长公共子序列

  195. [1147-longest-chunked-palindrome-decomposition]

  196. [1155-number-of-dice-rolls-with-target-sum]

  197. [1162-as-far-from-land-as-possible]

  198. [1182-shortest-distance-to-target-color]

  199. [1186-maximum-subarray-sum-with-one-deletion]

  200. [1187-make-array-strictly-increasing]

  201. [1191-k-concatenation-maximum-sum]

  202. [1216-valid-palindrome-iii]

  203. [1218-longest-arithmetic-subsequence-of-given-difference]

  204. [1220-count-vowels-permutation]

  205. [1223-dice-roll-simulation]

  206. [1227-airplane-seat-assignment-probability]

  207. [1230-toss-strange-coins]

  208. [1235-maximum-profit-in-job-scheduling]

  209. [1246-palindrome-removal]

  210. [1255-maximum-score-words-formed-by-letters]

  211. [1259-handshakes-that-dont-cross]

  212. [1262-greatest-sum-divisible-by-three]

  213. [1269-number-of-ways-to-stay-in-the-same-place-after-some-steps]

  214. [1277-count-square-submatrices-with-all-ones]

  215. [1278-palindrome-partitioning-iii]

  216. 1289. 下降路径最小和 II

  217. [1301-number-of-paths-with-max-score]

  218. [1312-minimum-insertion-steps-to-make-a-string-palindrome]

  219. [1320-minimum-distance-to-type-a-word-using-two-fingers]

  220. [1326-minimum-number-of-taps-to-open-to-water-a-garden]

  221. [1334-find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance]

  222. [1335-minimum-difficulty-of-a-job-schedule]

  223. [1340-jump-game-v]

  224. [1349-maximum-students-taking-exam]

  225. [1359-count-all-valid-pickup-and-delivery-options]

  226. [1363-largest-multiple-of-three]

  227. [1372-longest-zigzag-path-in-a-binary-tree]

  228. [1373-maximum-sum-bst-in-binary-tree]

  229. [1387-sort-integers-by-the-power-value]

  230. [1388-pizza-with-3n-slices]

  231. [1395-count-number-of-teams]

  232. [1397-find-all-good-strings]

  233. [1402-reducing-dishes]

  234. [1406-stone-game-iii]

  235. [1411-number-of-ways-to-paint-n-3-grid]

  236. [1416-restore-the-array]

  237. [1420-build-array-where-you-can-find-the-maximum-exactly-k-comparisons]

  238. [1425-constrained-subsequence-sum]

  239. [1434-number-of-ways-to-wear-different-hats-to-each-other]

  240. [1444-number-of-ways-of-cutting-a-pizza]

  241. [1449-form-largest-integer-with-digits-that-add-up-to-target]

  242. [1458-max-dot-product-of-two-subsequences]

  243. [1463-cherry-pickup-ii]

  244. [1467-probability-of-a-two-boxes-having-the-same-number-of-distinct-balls]

  245. [1473-paint-house-iii]

  246. [1477-find-two-non-overlapping-sub-arrays-each-with-target-sum]

  247. [1478-allocate-mailboxes]

  248. [1483-kth-ancestor-of-a-tree-node]

  249. [1493-longest-subarray-of-1s-after-deleting-one-element]

  250. [1494-parallel-courses-ii]

  251. [1504-count-submatrices-with-all-ones]

  252. [1510-stone-game-iv]

  253. [1524-number-of-sub-arrays-with-odd-sum]

  254. [1525-number-of-good-ways-to-split-a-string]

  255. [1526-minimum-number-of-increments-on-subarrays-to-form-a-target-array]

  256. [1531-string-compression-ii]

  257. [1537-get-the-maximum-score]

  258. [1547-minimum-cost-to-cut-a-stick]

  259. [1548-the-most-similar-path-in-a-graph]

  260. [1553-minimum-number-of-days-to-eat-n-oranges]

  261. [1563-stone-game-v]

  262. [1567-maximum-length-of-subarray-with-positive-product]

  263. [1569-number-of-ways-to-reorder-array-to-get-same-bst]

  264. [1575-count-all-possible-routes]

  265. [1578-minimum-time-to-make-rope-colorful]

  266. [1594-maximum-non-negative-product-in-a-matrix]

  267. [1595-minimum-cost-to-connect-two-groups-of-points]

  268. [1611-minimum-one-bit-operations-to-make-integers-zero]

  269. [1617-count-subtrees-with-max-distance-between-cities]

  270. [1621-number-of-sets-of-k-non-overlapping-line-segments]

  271. [1626-best-team-with-no-conflicts]

  272. [1638-count-substrings-that-differ-by-one-character]

  273. [1639-number-of-ways-to-form-a-target-string-given-a-dictionary]

  274. [1641-count-sorted-vowel-strings]

  275. [1643-kth-smallest-instructions]

  276. [1653-minimum-deletions-to-make-string-balanced]

  277. [1654-minimum-jumps-to-reach-home]

  278. [1655-distribute-repeating-integers]

  279. [1659-maximize-grid-happiness]

  280. [1668-maximum-repeating-substring]

  281. [1671-minimum-number-of-removals-to-make-mountain-array]

  282. [1681-minimum-incompatibility]

  283. [1682-longest-palindromic-subsequence-ii]

  284. [1687-delivering-boxes-from-storage-to-ports]

  285. [1690-stone-game-vii]

  286. [1691-maximum-height-by-stacking-cuboids]

  287. [1692-count-ways-to-distribute-candies]

  288. [1696-jump-game-vi]

  289. [1714-sum-of-special-evenly-spaced-elements-in-array]

  290. [1723-find-minimum-time-to-finish-all-jobs]

  291. [1728-cat-and-mouse-ii]

  292. [1735-count-ways-to-make-array-with-product]

  293. [1745-palindrome-partitioning-iv]

  294. [1746-maximum-subarray-sum-after-one-operation]

  295. [1749-maximum-absolute-sum-of-any-subarray]

  296. [1751-maximum-number-of-events-that-can-be-attended-ii]

  297. [1755-closest-subsequence-sum]

  298. [1770-maximum-score-from-performing-multiplication-operations]

  299. [1771-maximize-palindrome-length-from-subsequences]

  300. [1774-closest-dessert-cost]

  301. [1786-number-of-restricted-paths-from-first-to-last-node]

  302. [1787-make-the-xor-of-all-segments-equal-to-zero]

  303. [1799-maximize-score-after-n-operations]

  304. [1815-maximum-number-of-groups-getting-fresh-donuts]

  305. [1824-minimum-sideway-jumps]

  306. [1857-largest-color-value-in-a-directed-graph]

  307. [1866-number-of-ways-to-rearrange-sticks-with-k-sticks-visible]

  308. [1871-jump-game-vii]

  309. [1872-stone-game-viii]

  310. [1879-minimum-xor-sum-of-two-arrays]

  311. [1883-minimum-skips-to-arrive-at-meeting-on-time]

  312. [1884-egg-drop-with-2-eggs-and-n-floors]

  313. [1888-minimum-number-of-flips-to-make-the-binary-string-alternating]

  314. [1896-minimum-cost-to-change-the-final-value-of-expression]

  315. [1900-the-earliest-and-latest-rounds-where-players-compete]

  316. [1908-game-of-nim]

  317. [1911-maximum-alternating-subsequence-sum]

  318. [1916-count-ways-to-build-rooms-in-an-ant-colony]

  319. [1928-minimum-cost-to-reach-destination-in-time]

  320. [1931-painting-a-grid-with-three-different-colors]

  321. [1937-maximum-number-of-points-with-cost]

  322. [1947-maximum-compatibility-score-sum]

  323. [1955-count-number-of-special-subsequences]

  324. [1959-minimum-total-space-wasted-with-k-resizing-operations]

  325. [1976-number-of-ways-to-arrive-at-destination]

  326. [1977-number-of-ways-to-separate-numbers]

  327. [1981-minimize-the-difference-between-target-and-chosen-elements]

  328. [1986-minimum-number-of-work-sessions-to-finish-the-tasks]

  329. [1987-number-of-unique-good-subsequences]

  330. [1994-the-number-of-good-subsets]

  331. 1997. 访问完所有房间的第一天

  332. [2002-maximum-product-of-the-length-of-two-palindromic-subsequences]

  333. [2003-smallest-missing-genetic-value-in-each-subtree]

  334. [2005-subtree-removal-game-with-fibonacci-tree]

  335. [2008-maximum-earnings-from-taxi]

  336. [2019-the-score-of-students-solving-math-expression]

  337. [2035-partition-array-into-two-arrays-to-minimize-sum-difference]

  338. [2036-maximum-alternating-subarray-sum]

  339. [2050-parallel-courses-iii]

  340. [2052-minimum-cost-to-separate-sentence-into-rows]

  341. [2054-two-best-non-overlapping-events]

  342. [2060-check-if-an-original-string-exists-given-two-encoded-strings]

  343. [2063-vowels-of-all-substrings]

  344. [2086-minimum-number-of-food-buckets-to-feed-the-hamsters]

  345. [2088-count-fertile-pyramids-in-a-land]

  346. [2100-find-good-days-to-rob-the-bank]

  347. [2110-number-of-smooth-descent-periods-of-a-stock]

  348. [2140-solving-questions-with-brainpower]

  349. [2143-choose-numbers-from-two-arrays-in-range]

  350. [2147-number-of-ways-to-divide-a-long-corridor]

  351. [2152-minimum-number-of-lines-to-cover-points]

  352. [2163-minimum-difference-in-sums-after-removal-of-elements]

  353. [2167-minimum-time-to-remove-all-cars-containing-illegal-goods]

  354. [2172-maximum-and-sum-of-array]

  355. [2184-number-of-ways-to-build-sturdy-brick-wall]

  356. [2188-minimum-time-to-finish-the-race]

  357. [2189-number-of-ways-to-build-house-of-cards]

  358. [2209-minimum-white-tiles-after-covering-with-carpets]

  359. [2218-maximum-value-of-k-coins-from-piles]

  360. [2222-number-of-ways-to-select-buildings]

  361. [2247-maximum-cost-of-trip-with-k-highways]

  362. [2262-total-appeal-of-a-string]

  363. [2263-make-array-non-decreasing-or-non-increasing]

  364. [2266-count-number-of-texts]

  365. [2267-check-if-there-is-a-valid-parentheses-string-path]

  366. [2272-substring-with-largest-variance]

  367. [2291-maximum-profit-from-trading-stocks]

  368. [2297-jump-game-viii]

  369. [2304-minimum-path-cost-in-a-grid]

  370. [2305-fair-distribution-of-cookies]

  371. [2310-sum-of-numbers-with-units-digit-k]

  372. [2311-longest-binary-subsequence-less-than-or-equal-to-k]

  373. [2312-selling-pieces-of-wood]

  374. [2313-minimum-flips-in-binary-tree-to-get-result]

  375. [2318-number-of-distinct-roll-sequences]

  376. [2320-count-number-of-ways-to-place-houses]

  377. [2321-maximum-score-of-spliced-array]

  378. [2327-number-of-people-aware-of-a-secret]

  379. [2328-number-of-increasing-paths-in-a-grid]

  380. [2338-count-the-number-of-ideal-arrays]

  381. [2355-maximum-number-of-books-you-can-take]

  382. [2361-minimum-costs-using-the-train-line]

  383. [2369-check-if-there-is-a-valid-partition-for-the-array]

  384. [2370-longest-ideal-subsequence]

  385. [2376-count-special-integers]

  386. [2378-choose-edges-to-maximize-score-in-a-tree]

  387. [2380-time-needed-to-rearrange-a-binary-string]

  388. [2393-count-strictly-increasing-subarrays]

  389. [2400-number-of-ways-to-reach-a-position-after-exactly-k-steps]

  390. [2403-minimum-time-to-kill-all-monsters]

  391. [2407-longest-increasing-subsequence-ii]

  392. [2420-find-all-good-indices]

  393. [2430-maximum-deletions-on-a-string]

  394. [2431-maximize-total-tastiness-of-purchased-fruits]

  395. [2435-paths-in-matrix-whose-sum-is-divisible-by-k]

  396. [2436-minimum-split-into-subarrays-with-gcd-greater-than-one]

  397. [2439-minimize-maximum-of-array]

  398. [2463-minimum-total-distance-traveled]

  399. [2464-minimum-subarrays-in-a-valid-split]

  400. [2466-count-ways-to-build-good-strings]

  401. [2472-maximum-number-of-non-overlapping-palindrome-substrings]

  402. [2478-number-of-beautiful-partitions]

  403. [2484-count-palindromic-subsequences]

  404. [2495-number-of-subarrays-having-even-product]

  405. [2501-longest-square-streak-in-an-array]

  406. [2510-check-if-there-is-a-path-with-equal-number-of-0s-and-1s]

  407. [2518-number-of-great-partitions]

  408. [2522-partition-string-into-substrings-with-values-at-most-k]

  409. [2533-number-of-good-binary-strings]

  410. [2538-difference-between-maximum-and-minimum-price-sum]

  411. [2547-minimum-cost-to-split-an-array]

  412. [2552-count-increasing-quadruplets]

  413. [2556-disconnect-path-in-a-binary-matrix-by-at-most-one-flip]

  414. [2571-minimum-operations-to-reduce-an-integer-to-0]

  415. [2572-count-the-number-of-square-free-subsets]

  416. [2573-find-the-string-with-lcp]

  417. [2581-count-number-of-possible-root-nodes]

  418. [2585-number-of-ways-to-earn-points]

  419. [2597-the-number-of-beautiful-subsets]

  420. [2606-find-the-substring-with-maximum-cost]

  421. [2617-minimum-number-of-visited-cells-in-a-grid]

  422. [2638-count-the-number-of-k-free-subsets]

  423. [2645-minimum-additions-to-make-valid-string]

  424. [2646-minimize-the-total-price-of-the-trips]

  425. [2673-make-costs-of-paths-equal-in-a-binary-tree]

  426. [2681-power-of-heroes]

  427. [2684-maximum-number-of-moves-in-a-grid]

  428. [2707-extra-characters-in-a-string]

  429. [2708-maximum-strength-of-a-group]

  430. [2712-minimum-cost-to-make-all-characters-equal]

  431. [2713-maximum-strictly-increasing-cells-in-a-matrix]

  432. [2719-count-of-integers]

  433. [2741-special-permutations]

  434. [2742-painting-the-walls]

  435. [2745-construct-the-longest-new-string]

  436. [2746-decremental-string-concatenation]

  437. [2750-ways-to-split-array-into-good-subarrays]

  438. [2767-partition-string-into-minimum-beautiful-substrings]

  439. [2770-maximum-number-of-jumps-to-reach-the-last-index]

  440. [2771-longest-non-decreasing-subarray-from-two-arrays]

  441. [2786-visit-array-positions-to-maximize-score]

  442. [2787-ways-to-express-an-integer-as-sum-of-powers]

  443. [2791-count-paths-that-can-form-a-palindrome-in-a-tree]

  444. [2801-count-stepping-numbers-in-range]

  445. [2809-minimum-time-to-make-array-sum-at-most-x]

  446. [2811-check-if-it-is-possible-to-split-array]

  447. [2826-sorting-three-groups]

  448. [2827-number-of-beautiful-integers-in-the-range]

  449. [2830-maximize-the-profit-as-the-salesman]

  450. [2836-maximize-value-of-function-in-a-ball-passing-game]

  451. 2850. 将石头分散到网格图的最少移动次数

  452. [2851-string-transformation]

  453. [2858-minimum-edge-reversals-so-every-node-is-reachable]

  454. [2867-count-valid-paths-in-a-tree]

  455. [2876-count-visited-nodes-in-a-directed-graph]

  456. [2892-minimizing-array-after-replacing-pairs-with-their-product]

  457. [2896-apply-operations-to-make-two-strings-equal]

  458. [2900-longest-unequal-adjacent-groups-subsequence-i]

  459. [2901-longest-unequal-adjacent-groups-subsequence-ii]

  460. [2902-count-of-sub-multisets-with-bounded-sum]

  461. [2911-minimum-changes-to-make-k-semi-palindromes]

  462. [2912-number-of-ways-to-reach-destination-in-the-grid]

  463. [2915-length-of-the-longest-subsequence-that-sums-to-target]

  464. [2916-subarrays-distinct-element-sum-of-squares-ii]

  465. [2919-minimum-increment-operations-to-make-array-beautiful]

  466. [2920-maximum-points-after-collecting-coins-from-all-nodes]

  467. [2925-maximum-score-after-applying-operations-on-a-tree]

  468. [2926-maximum-balanced-subsequence-sum]

  469. [2930-number-of-strings-which-can-be-rearranged-to-contain-substring]

  470. [2944-minimum-number-of-coins-for-fruits]

  471. [2945-find-maximum-non-decreasing-array-length]

  472. [2957-remove-adjacent-almost-equal-characters]

  473. [2969-minimum-number-of-coins-for-fruits-ii]

  474. [2973-find-number-of-coins-to-place-in-tree-nodes]

  475. [2977-minimum-cost-to-convert-string-ii]

  476. [2979-most-expensive-item-that-can-not-be-bought]

  477. [2992-number-of-self-divisible-permutations]

  478. [2998-minimum-number-of-operations-to-make-x-and-y-equal]

  479. [2999-count-the-number-of-powerful-integers]

  480. [3003-maximize-the-number-of-partitions-after-operations]

  481. [3004-maximum-subtree-of-the-same-color]

  482. [3007-maximum-number-that-sum-of-the-prices-is-less-than-or-equal-to-k]

  483. [3018-maximum-number-of-removal-queries-that-can-be-processed-i]

  484. [3032-count-numbers-with-unique-digits-ii]

  485. [3040-maximum-number-of-operations-with-the-same-score-ii]

  486. [3041-maximize-consecutive-elements-in-an-array-after-modification]

  487. [3068-find-the-maximum-sum-of-node-values]

  488. [3077-maximum-strength-of-k-disjoint-subarrays]

  489. [3082-find-the-sum-of-the-power-of-all-subsequences]

  490. [3098-find-the-sum-of-subsequence-powers]

  491. [3117-minimum-sum-of-values-by-dividing-array]

  492. [3122-minimum-number-of-operations-to-satisfy-conditions]

  493. [3129-find-all-possible-stable-binary-arrays-i]

  494. [3130-find-all-possible-stable-binary-arrays-ii]

  495. [3135-equalize-strings-by-adding-or-removing-characters-at-ends]

  496. [3144-minimum-substring-partition-of-equal-character-frequency]

  497. [3148-maximum-difference-score-in-a-grid]

  498. [3149-find-the-minimum-cost-array-permutation]

  499. [3154-find-number-of-ways-to-reach-the-k-th-stair]

  500. [3165-maximum-sum-of-subsequence-with-non-adjacent-elements]

  501. [3176-find-the-maximum-length-of-a-good-subsequence-i]

  502. [3177-find-the-maximum-length-of-a-good-subsequence-ii]

  503. [3180-maximum-total-reward-using-operations-i]

  504. [3181-maximum-total-reward-using-operations-ii]

  505. [3183-the-number-of-ways-to-make-the-sum]

  506. [3186-maximum-total-damage-with-spell-casting]

  507. [3192-minimum-operations-to-make-binary-array-elements-equal-to-one-ii]

  508. [3193-count-the-number-of-inversions]

  509. [3196-maximize-total-cost-of-alternating-subarrays]

  510. [3201-find-the-maximum-length-of-valid-subsequence-i]

  511. [3202-find-the-maximum-length-of-valid-subsequence-ii]

  512. [3205-maximum-array-hopping-score-i]

  513. [3213-construct-string-with-minimum-cost]

  514. [3218-minimum-cost-for-cutting-cake-i]

  515. [3225-maximum-score-from-grid-operations]

  516. [3229-minimum-operations-to-make-array-equal-to-target]

  517. [3241-time-taken-to-mark-all-nodes]

  518. [3247-number-of-subsequences-with-odd-sum]

  519. [3250-find-the-count-of-monotonic-pairs-i]

  520. [3251-find-the-count-of-monotonic-pairs-ii]

  521. [3256-maximum-value-sum-by-placing-three-rooks-i]

  522. [3257-maximum-value-sum-by-placing-three-rooks-ii]

  523. [3259-maximum-energy-boost-from-two-drinks]

  524. [3260-find-the-largest-palindrome-divisible-by-k]

  525. [3269-constructing-two-increasing-arrays]

  526. [3276-select-cells-in-grid-with-maximum-score]

  527. [3277-maximum-xor-score-subarray-queries]

  528. [3284-sum-of-consecutive-subarrays]

  529. [3287-find-the-maximum-sequence-value-of-array]

  530. [3290-maximum-multiplication-score]

  531. [3291-minimum-number-of-valid-strings-to-form-target-i]

  532. [3292-minimum-number-of-valid-strings-to-form-target-ii]

  533. [3299-sum-of-consecutive-subsequences]

  534. [3302-find-the-lexicographically-smallest-valid-sequence]

  535. [3316-find-maximum-removals-from-source-string]

  536. [3317-find-the-number-of-possible-ways-for-an-event]

  537. [3320-count-the-number-of-winning-sequences]

  538. [3332-maximum-points-tourist-can-earn]

  539. [3333-find-the-original-typed-string-ii]

  540. [3335-total-characters-in-string-after-transformations-i]

  541. [3336-find-the-number-of-subsequences-with-equal-gcd]

  542. [3337-total-characters-in-string-after-transformations-ii]

  543. [3339-find-the-number-of-k-even-arrays]

  544. [3343-count-number-of-balanced-permutations]

  545. [3351-sum-of-good-subsequences]

  546. [3352-count-k-reducible-numbers-less-than-n]

  547. [3363-find-the-maximum-number-of-fruits-collected]

  548. [3366-minimum-array-sum]

  549. [3367-maximize-sum-of-weights-after-edge-removals]

  550. [3376-minimum-time-to-break-locks-i]

  551. [3388-count-beautiful-splits-in-an-array]

  552. [3389-minimum-operations-to-make-character-frequencies-equal]

  553. [3393-count-paths-with-the-given-xor-value]

  554. [3409-longest-subsequence-with-decreasing-adjacent-difference]

  555. [3410-maximize-subarray-sum-after-removing-all-occurrences-of-one-element]

  556. [3414-maximum-score-of-non-overlapping-intervals]

  557. [3418-maximum-amount-of-money-robot-can-earn]

  558. [3428-maximum-and-minimum-sums-of-at-most-size-k-subsequences]

  559. [3429-paint-house-iv]

  560. [3434-maximum-frequency-after-subarray-operation]

  561. [3441-minimum-cost-good-caption]

  562. [3444-minimum-increments-for-target-multiples-in-an-array]

  563. [3448-count-substrings-divisible-by-last-digit]

  564. [3458-select-k-disjoint-special-substrings]

  565. [3459-length-of-longest-v-shaped-diagonal-segment]

  566. [3466-maximum-coin-collection]

  567. [3469-find-minimum-cost-to-remove-array-elements]

  568. [3472-longest-palindromic-subsequence-after-at-most-k-operations]

  569. [3473-sum-of-k-subarrays-with-length-at-least-m]

  570. [3489-zero-array-transformation-iv]

  571. [3490-count-beautiful-numbers]

  572. [3500-minimum-cost-to-divide-array-into-subarrays]

  573. [3503-longest-palindrome-after-substring-concatenation-i]

  574. [3504-longest-palindrome-after-substring-concatenation-ii]

  575. [3505-minimum-operations-to-make-elements-within-k-subarrays-equal]

.4. 0/1 Knapsack 0/1 背包

dynamic programming knapsack

.4.1. 经典题目

Subset Sum,子集和问题

Minimum Subset Sum Difference,子集和的最小差问题

Count of Subset Sum,相等子集和的个数问题

.4.2. 参考资料

.5. Unbounded Knapsack 无限背包

.5.1. 经典题目

Unbounded Knapsack,无限背包

Rod Cutting,切钢条问题

Minimum Coin Change,凑齐每个数需要的最少硬币问题

Maximum Ribbon Cut,丝带的最大值切法

.6. Fibonacci Numbers 斐波那契数列

.6.1. 经典题目

Staircase,爬楼梯问题

Number factors,分解因子问题

Minimum jumps to reach the end,蛙跳最小步数问题

Minimum jumps with fee,蛙跳带有代价的问题

House thief,偷房子问题

.7. Palindromic Subsequence 回文子系列

.7.1. 经典题目

Longest Palindromic Substring,最长回文子字符串

Count of Palindromic Substrings,最长子字符串的个数问题

Minimum Deletions in a String to make it a Palindrome,怎么删掉最少字符构成回文

Palindromic Partitioning,怎么分配字符,形成回文

.8. Longest Common Substring 最长子字符串系列

.8.1. 经典题目

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,交织字符串

dynamic programming 02

.9. 树形 DP 套路

树形 DP 套路使用前提:如果题目求解目标是 S 规则,则求解释流程可以定成以每一个节点为头节点的子树在 S 规则下的每一个答案,并且最终答案一定就在其中。

树形 DP 套路的解题步骤

  1. 第一步:以某个节点 X 为头节点的子树中,分析答案有哪些可能性,并且这种分析是以 X 的左子树、X 的右子树和 X 整棵树的角度来考虑可能性的。

    请注意这里的顺序:左子树、右子树及整棵树。先左右,如果左右满足,则就可以先上延伸,判断出整棵树。这也是递归调用“触底反弹”的过程。所以,很容易使用递归来完成相关操作。根据上述的流程,使用 后序遍历 更合适。
  2. 第二步:根据第一步的可能性分析,列出所有需要的信息。比如:最大值、最小值,高度,深度,节点数等等。

  3. 第三步:合并第二步的信息,对左树和右树提出同样的要求,并写出信息结构。

    写出信息结构是把所有的信息都装到一个对象中。如果只需要一个信息,就可以用简单类型来表示了。但是,在树的结构中,大概率是需要多个信息的。
  4. 第四步:设计递归函数,递归函数是处理以 X 为头节点的情况下的大难,包括设计递归的 base case,默认直接得到左树和右树的所有信息,以及把可能性做整合,并且要返回第三步的信息结构。

.9.1. 相关试题