題意:一群屌絲排隊參加聯誼,每個人都有屌絲值,如果他是第k個進場的,那麼他的憤怒值就是(k-1)*di,主辦方想使所有屌絲的憤怒值總和最小,就用乙個黑屋子來改變屌絲的進場順序,黑屋子實際上是乙個棧,先進後出。現在要求用這個棧能得到的最小的憤怒值總和是多少。
分析:難點在於你不知道用了多少次黑屋子、用在哪些人身上以及每次各自進黑屋子的人數。很容易知道每個決策都會影響最終結果,那麼我們就想用dp來做。問題是哪種dp,本題實際上就是在區間上求最優解,所以用區間dp。區間dp就是每次把乙個區間分成兩個區間,然後這兩個區域性區間的最優解合併得到這個大區間的最優解。
狀態:dp[i][j]表示第i個人到第j個人這段區間的他們以各種方式使用黑屋子得到的最小的憤怒值;
轉移:dp[i][j]=min(dp[i][j],a[i]*(k-1)+dp[i+1][i+k-1]+dp[i+k][j]+k*(sum[j]-sum[i+k-1]))
轉移方程是這樣得到的:在區間[i~j]中,考慮第乙個也就是第i個人的進場順序設為k。第乙個進場不用說,如果他第二個進場,那麼第乙個進場的肯定是他後面的那個人,也就是第i+1個人,以此類推,如果他第k個進場,那麼他後面的連續k-1個人一定比他先進場,不過這k-1個人的順序又是乙個子問題了,這也是用到dp的地方。
三重迴圈列舉區間的起點終點和k。
區間dp不太懂,以後繼續積累。
**:#include#include#define min(a,b) a
hdu4283 經典區間dp
input 多組輸入用例t,每組第一行是小姐姐的數量,以下n行按照順序表示第1個到第n個小姐姐的耐心度m對於每組資料輸出,一行輸出乙個值,代表cry的最大快樂值,即小姐姐們耐心值的最小和。1 n 100,0 m 100 output 輸出cry的最大快樂值,具體輸出參照樣例。sample input...
hdu4283區間dp 記憶化搜尋 區間分化
題意 給你一些人的屌絲值di,計算總屌絲值 sum k 1 di k為第i個人進入的位置。給你乙個棧,可以使人的位置改變。方法一 記憶化搜尋 dp i j k 表示區間 i,j 第i個人放在k位置的屌絲值。搜尋所有的狀態,記錄已經搜尋的狀態。記憶化搜尋 這裡也可以用二維的陣列,另外用乙個sum陣列和...
屌絲的特徵
屌絲一般都是農村家庭或城市底層小市民家庭出身,有的十二載寒窗考上大學,攻讀理科專業,或失敗而轉向文科等真正工作後,卻發現沒有獲得理想的效果,投入與產出不成比例,很是得不償失 有的初中輟學,進城務工,或成了髮廊師傅,或成了網咖網管,在城市的繁華之中分得一杯苦羹 或是無業遊民,但是自己一般不願承認,網上...