hdu4283 經典區間dp

2021-09-25 20:14:58 字數 1075 閱讀 6430

input

多組輸入用例t,每組第一行是小姐姐的數量,以下n行按照順序表示第1個到第n個小姐姐的耐心度m對於每組資料輸出,一行輸出乙個值,代表cry的最大快樂值,即小姐姐們耐心值的最小和。(1<=n<=100,0<=m<=100)

output

輸出cry的最大快樂值,具體輸出參照樣例。

sample input37

1 3 5 2 6 4 3

31 2 3

41 2 3 4

sample output

case #1: 52

case #2: 4

case #3: 10

hint

對於第二組樣例,先讓1號小姐姐化妝,再讓二號小姐姐化妝,因此第乙個和3號小姐姐玩tot_m=0,按照規則再和第二個小姐姐玩tot_m=tot_m+2(耐心值)1(前面等待了1個)=2,最後和第乙個小姐姐玩,tot_m=tot_m+1(耐心值)2(前面等待了2個)=4;

對於第三組樣例,先讓1號小姐姐化妝,再讓2號小姐姐化妝,再讓3號小姐姐化妝,因此第乙個和4號小姐姐玩tot_m=0,按照規則再和第3個小姐姐玩tot_m=tot_m+3(耐心值)1(前面等待了1個)=3,再和第二個小姐姐玩,tot_m=tot_m+2(耐心值)2(前面等待了2個)=7;最後和第1個小姐姐玩tot_m=tot_m+1(耐心值)*3(前面等待了3個)=10;

cry看了這個題,cry著問為啥不給第一組的解析呢!因為,我也不知道~~~~~

區間dp好題,**不長,但是狀態轉移方程不是很好想。

狀態:dp[i][j]表示從i區間到j區間的最小耐心值

狀態轉移方程:dp[i][j]=min

邊界:dp[i][i]=0;

sum陣列為耐心值的字首和

#include using namespace std;

int main(int argc, char** ar**)

for(int len=1;len} printf("case #%d: %d\n",ncase,dp[1][n]);

} return 0;

}

!HDU 4283 屌絲聯誼會 區間dp

題意 一群屌絲排隊參加聯誼,每個人都有屌絲值,如果他是第k個進場的,那麼他的憤怒值就是 k 1 di,主辦方想使所有屌絲的憤怒值總和最小,就用乙個黑屋子來改變屌絲的進場順序,黑屋子實際上是乙個棧,先進後出。現在要求用這個棧能得到的最小的憤怒值總和是多少。分析 難點在於你不知道用了多少次黑屋子 用在哪...

hdu4283區間dp 記憶化搜尋 區間分化

題意 給你一些人的屌絲值di,計算總屌絲值 sum k 1 di k為第i個人進入的位置。給你乙個棧,可以使人的位置改變。方法一 記憶化搜尋 dp i j k 表示區間 i,j 第i個人放在k位置的屌絲值。搜尋所有的狀態,記錄已經搜尋的狀態。記憶化搜尋 這裡也可以用二維的陣列,另外用乙個sum陣列和...

HDU 5115 經典區間dp

題意 n頭狼,殺死第i頭狼會受到b i 1 b i 1 a i 的傷害,問殺死所有狼受到的最小傷害值。因為無論怎麼選,a值都只需要加一遍,所以先把a的和算出來,最後加到答案上就行了。我們可以在兩邊加一頭a值和b值都為0的狼,dp i j min dp i j dp i k dp k j b i b ...