震驚!動態規劃精華總結-----看完這一篇就夠了(含leetcode練習題)
最近在學CS577 algorithm,做了很多DP問題,總結一下
http://pages.cs.wisc.edu/~shuchi/courses/577-S18/
我們常見的動態規劃分為三種
- 層級DP(最為簡單,逐層計算就好)
- 用二維陣列進行DP
- 用一維陣列進行DP
這裡先不討論樹狀DP
1. 層級DP(這裡不討論,相信絕大多數人看一眼就找到結果)
2. 二維DP
這裡先記住我一句話:二維DP首先要找兩個逐漸改變的量。(後面我們逐題分析改變的量怎麼找,找了有什麼用)
trick1: 下標可以從1開始,給下標為0的entry提前賦值好
trick2: 建立DP array可以用Integer型別,用null判斷memory
我想講兩種思路,自上而下和自下而上。這又涉及到兩種思想,可以為以下對應方式
自上而下:Recursion
自下而上: 填格子
2.1 Leetcode322 coin change
這題有兩個變數。用1…n的硬幣找0…amount的錢數,因此我們的二維dp應該有硬幣下標和總錢數。
OPT(amount, index) = Math.min(OPT(amount, index-1) + (amount-coin[index-1], index))
2.2 416. Partition Equal Subset Sum
這題可以理解成是否存在一個子集能把揹包的一半裝滿
這題有兩個變數。用a[0…n]的元素裝滿還剩sum的包
OPT(n, sum) = OPT(n-1, sum) || OPT(n, sum-a[n])
相關文章
- 動態規劃此一篇就夠了 萬字總結!動態規劃
- 這一篇就夠了——APP瘦身總結APP
- 動態規劃練習題動態規劃
- [LeetCode] 動態規劃題型總結LeetCode動態規劃
- LeetCode總結,動態規劃問題小結LeetCode動態規劃
- leetcode總結——動態規劃LeetCode動態規劃
- LeetCode動態規劃總結LeetCode動態規劃
- 學習JDBC這一篇就夠了JDBC
- 學習MySQL這一篇就夠了MySql
- 學習Jmeter,這一篇就夠了JMeter
- 學習git這一篇就夠了!!!Git
- HTML教程(看完這篇就夠了)HTML
- leetcode-動態規劃總結LeetCode動態規劃
- 動態規劃練習 6動態規劃
- 應付Android面試看這一篇文就夠了(含面試真題)Android面試
- 安卓動態獲取許可權看這一篇就夠了安卓
- 動態規劃 總結動態規劃
- LeetCode 動態規劃 House Robber 習題LeetCode動態規劃
- APP瘦身這一篇就夠了APP
- 深入Babel,這一篇就夠了Babel
- 學Nginx,這一篇就夠了Nginx
- Git 看這一篇就夠了Git
- Java 動態代理,看這篇就夠了Java
- 力扣練習-動態規劃力扣動態規劃
- 搞懂Python正規表示式,這一篇就夠了Python
- 動態規劃分類題目總結動態規劃
- 學習Hibernate5這一篇就夠了
- 學習AIDL,這一篇文章就夠了AI
- 【跨域】jsonp看完這篇文章就夠了跨域JSON
- Ubuntu搭建Pytorch,就這一篇就夠了UbuntuPyTorch
- Flutter DataTable 看這一篇就夠了Flutter
- Git【入門】這一篇就夠了Git
- 代理模式看這一篇就夠了模式
- MySQL查詢這一篇就夠了MySql
- Java 集合看這一篇就夠了Java
- [譯] 理解CORS這一篇就夠了CORS
- AJAX入門這一篇就夠了
- html css js(這一篇就夠了)HTMLCSSJS