(動態規劃)HDU1421搬寢室

2021-07-24 14:06:29 字數 1182 閱讀 6289

problem description

搬寢室是很累的,xhd深有體會.時間追述2023年7月9號,那天xhd迫於無奈要從27號樓搬到3號樓,因為10號要封樓了.看著寢室裡的n件物品,xhd開始發呆,因為n是乙個小於2000的整數,實在是太多了,於是xhd決定隨便搬2*k件過去就行了.但還是會很累,因為2*k也不小是乙個不大於n的整數.幸運的是xhd根據多年的搬東西的經驗發現每搬一次的疲勞度是和左右手的物品的重量差的平方成正比(這裡補充一句,xhd每次搬兩件東西,左手一件右手一件).例如xhd左手拿重量為3的物品,右手拿重量為6的物品,則他搬完這次的疲勞度為(6-3)^2 = 9.現在可憐的xhd希望知道搬完這2*k件物品後的最佳狀態是怎樣的(也就是最低的疲勞度),請告訴他吧.

input

每組輸入資料有兩行,第一行有兩個數n,k(2<=2*k<=n<2000).第二行有n個整數分別表示n件物品的重量(重量是乙個小於2^15的正整數).

output

對應每組輸入資料,輸出資料只有乙個表示他的最少的疲勞度,每個一行.

sample input

2 1

1 3

sample output

4

有兩個限制條件=.=用二維來做-.-迴圈到物品i選擇i個,那麼肯定是選擇第i個物品的!因為數量要夠啊!!zz

#include #include #include #include #include #define maxn 2010

//#define ma 207374182400

//#define ma 2073741824000

int w[maxn];

long long dp[maxn][maxn];

//int pd[maxn][maxn];

int n, k;

using namespace std;

int square(int i, int j)

int main()

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

dp[2][2] = (w[1] - w[2]) * (w[1] - w[2]);

for(int i = 3; i <= n; i++)

}printf("%lld\n", dp[n][2 * k]);

}return 0;

}

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

HDU 1421 搬寢室 動態規劃

description 胡老師馬上要搬新家了,可是搬家真的是乙個很累的活,看著家裡的n件物品,胡老師已經凌亂了,因為物品實在太多。於是胡老師想了又想,決定先隨便搬2 p件過去就行了。現在,胡老師發現每搬一次的疲勞度是和左右手的物品的重量差的平方成正比,每次左手一件右手一件 如果胡老師左手拿重量為3的...