hdu 1421 搬寢室 解題報告

2021-07-04 03:33:46 字數 574 閱讀 6737

思路:用f表示i件要搬j件的最小,主要在於要不要搬後乙個

如果要,則getf(i-2,j-1)+a[i-1]

否則,getf(i-1,j)

公式 f[n][k] = min(f[n- 1][k], f[n - 2][k - 1] + a[n - 1])

getf用來處理一些邊界情況,例如i必須比2*j大或等於,j不能=0

**如下:

#include#includeusing namespace std;

int f[2001][1001];//用於存i件的搬j的最小疲勞值

int a[2001];

int getf(int i, int j)

int main()

sort(a + 1, a + n + 1);

//a[i-1]就存了(a[i]-a[i-1])的平方

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

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

}printf("%d\n", f[n][k]);

}return 0;

}

HDU1421搬寢室解題思路

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

動態規劃 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對的總疲勞度,則對於第...