动态规划之强盗抢劫
? ? ? ? ?題目:強盜搶劫一排房間,每個房間都藏著一定數量的錢,不能搶劫兩個相鄰的房間,要求搶的錢最多
?????????數組如:[2,7,9,3,1]
?????????當輸入的個數為0,1,2這個很好判斷,當輸入的數字大于3時,就要用到動態規劃了,方程是:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]),dp[i]是當搶到第i個數時,能搶到最大值,其思路是,從局部最大值推到最終結果最大。假如當我們搶到第5個房間,那這個第5個房間有二種情況,搶不和不被搶,因為只能隔一個房間搶一個,如果這時候搶到第4個房間有個最大值,搶到第3個房間有個最大值,如果第3個房間的最大值加上這第5個房間的值大于搶到第4個房間時的最大時,那就搶3,5而不搶4,反而,就按搶4的策略,這樣從前往后推,最后的結果一定是最大的。
? ? ? ? ?
? ?
dp[0]=2
????dp[1]=7
????-----------------------i=3時,能搶到的最大值是11
????dp[i - 2]=2
????nums[i]=9
????dp[i - 1]=7
????dp=11
????-----------------------i=4時,能搶到的最大值是11
????dp[i - 2]=7
????nums[i]=3
????dp[i - 1]=11
????dp=11
????-----------------------i=5時,能搶到的最大值是12
???dp[i - 2]=11?
???nums[i]=1
???dp[i - 1]=11
???dp=12
??-----------------------
???n=12
???每次用新房間的值加上dp里面存儲的值,在和上一個dp里面的值進行比較,取其中較大的,這樣一直遞推下去。
?
參考地址:https://www.codeleading.com/article/400996440/
總結
- 上一篇: thrift RPC接口请求超时
- 下一篇: 动态规划之等差递减区间个数