poj 1821(单调队列优化dp)
生活随笔
收集整理的這篇文章主要介紹了
poj 1821(单调队列优化dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:有一道線性籬笆由N個連續的木板組成。有K個工人,你要叫他們給木板涂色。每個工人有3個參數:L 表示 這個工人可以涂的最大木板數目,S表示這個工人站在哪一塊木板,P表示這個工人每涂一個木板可以得到的錢。要注意的是,工人i可以選擇不涂任何木板,否則,他的涂色區域必須是連續的一段,并且S[i]必須包含在內。 最后還有,每塊木板只能被涂一次。?
解題思路:這是一道單調隊列優化dp的問題,首先狀態dp[i][j]表示第i個工人刷的最后一塊木板為j,注意:木板可刷可不刷,工人也可以不刷任何墻。之前我忘記了,所以狀態方程只寫對了一半:dp[i][j] = max(dp[i][j],dp[i-1][k] + (j-k)*p[i]),這里還有,dp[i][j] = max(dp[i][j],dp[i-1][j],dp[i][j-1]) //第i個人不刷,第j面墻不刷
這里的關鍵是如何優化方程,注意到dp[i][j]=max(dp[i-1][k]-k*p[i])+j*p[i],可以直接維護dp[i-1][k]-k*p[i]的最大值即可,這里用到的就是單調隊列。
參考博客:http://www.cnblogs.com/proverbs/archive/2012/10/04/2711751.html
總結
以上是生活随笔為你收集整理的poj 1821(单调队列优化dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JEECG技术博文】online自定义
- 下一篇: poj 2373(单调队列优化dp)