思路:把重物從小到大排序,計算出每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對的總疲勞度,則對於第...