HDU 1421 搬寢室 類似揹包DP

2022-05-15 02:19:26 字數 798 閱讀 6164

思路:把重物從小到大排序,計算出每2個相鄰的重物產生的疲勞度,放在p[i]陣列中,表示i與i+1這2個重物產生的疲勞度。 

dp[i][j]表示進行到第i個物品(i前面的物品不一定都選了,跟揹包差不多,i表示進行到第i個物品),已經選了j對物品 產生的最小疲勞度。

初始化:

先把所有值賦值為inf(無窮大),然後dp[i][0]=0;(0<=i<=n)因為沒選重物之前疲勞度為0;

for(i=0;i<=n;i++)

for(j=0;j<=k;j++)

dp[i][j]=inf;

for(i=0;i<=n;i++)dp[i][0]=0;

則狀態轉移方程為:

dp[i-1][j]表示沒有選i這個物品, 當選了i這物品後就必須選i-1這個物品,選了這兩個物品,那狀態變為dp[i-2][j-1]+p[i-1];

dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+p[i-1])
ac**

view code

#include#include

#include

using

namespace

std;

#define inf 100000000

int a[2001],p[2001

];int dp[2001][1001

];int

main()

printf(

"%d\n

",dp[n][k]);

}return0;

}

hdu 1421 搬寢室 類揹包問題

可以說是揹包問題吧 揹包容量為k組,從n個中挑k組 因為要平方差最小的,故配組的時候一定是相鄰的兩個,共有n 1組,求出每組的平方差 所求就變成了從n 1個數中跳k個和最小的 好像挺簡單,但是不能把同乙個物品搬兩次吧,求相鄰的兩個數的平方差的時候,除了頭尾,其餘物品都算了兩次 所以用動態規劃 inc...

動態規劃 hdu 1421 搬寢室

problem description 搬寢室是很累的,xhd深有體會.時間追述2006年7月9號,那天xhd迫於無奈要從27號樓搬到3號樓,因為10號要封樓了.看著寢室裡的n件物品,xhd開始發呆,因為n是乙個小於2000的整數,實在是太多了,於是xhd決定隨便搬2 k件過去就行了.但還是會很累,...

HDU1421 搬寢室 動態規劃

動態規劃題 題意是輸入兩個整數n和k,表示從n件物品中搬走k對 每次左右手各搬一件 已知每件物品的疲勞值,求搬走k對後的最小疲勞度。每個物品的疲勞度用ans存起來,很明顯,把ans按公升序排序後每相鄰兩個物品的疲勞度都是最小的 然後定義陣列dp i j 表示從前i件物品中搬走j對的總疲勞度,則對於第...