我是個對電腦科學有興趣的學生,我會貼上我的學習歷程及生活心情,也請大大們多多指教。 :)

2015年3月8日 星期日

[UVa] 10032 - Tug of War

題目網址: http://goo.gl/h6lfTF

題意: 給定n個人以及他們每個人的體重,要求將這n個人分成兩隊,且兩隊人數差不得超過1個人,且要使得兩個隊伍的體重和相差最小,輸出最後兩隊的體重和。



解法:  從某集合取出子集使得子集的和為某數,是常見的subset sum problem,由於子集合的人數是有限制的,所以遞迴方程要做個小改變

dp[w] = p=
{ 1, if w = 0
{  dp[w-wi]<<1, if w > 0 and w >= wi, 1 <= i <= n
表示體重和為w時,有哪些可能的人數集合(p狀態壓縮)來形成w。

TAG: DP, subset sum, state compression

注意: 剛開始時就想到DP,只是被lucky cat誤導以為greedy可解,可惡。

程式碼:

沒有留言:

張貼留言

任何意見都樂意傾聽