SDUT OJ I樣 0 1揹包問題 模板

2022-04-28 22:06:31 字數 862 閱讀 7790

time limit: 1000ms   memory limit: 65536k  有疑問?點這裡^_^

這是個什麼問題呢?dp,貪心,資料結構,圖論,數論還是計算幾何?管他呢,反正胖巨巨都會,雖然胖巨巨走得早。

現在有n個數xi,現在你要把這些數分成兩組a,b,使得abs(sum(a)-sum(b))盡可能的小,並且每個xi必須且只能分

到一組中,每組至少包含乙個數字。

sum()表示計算累加和,abs()表示計算絕對值。

輸入有多組。對於每組資料:

第一行輸入乙個n(1 <= n <= 100),接下來的n行每行乙個整數xi(1 <= xi <= 50)。

對於每組資料,如果你能完成任務輸出乙個整數代表答案,否則輸出-1。

331

22210

0

8

例如前輩給我出的資料:

510 8 9 5 4      正確結果應該是0,貪心的結果就掛了!

正確的演算法是:如果想讓兩個分立的數字集合的abs()之差最小,也就是說讓兩個集合的各自的和盡可能的接近

(sum(集合a)+sum(集合b))/2.  即使不會完全均分也不要在意,因為我們要用接下來的揹包來做,這個揹包

不一定是裝滿的!

**:

#include #include #include #include #include #include using namespace std;

int f[2600];

int main()

dd=dd-f[sum];

printf("%d\n", abs(f[sum]-dd) );

}return 0;

}

揹包問題 01揹包問題

n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...

揹包問題 01揹包

有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...

揹包問題(01揹包)

1085 揹包問題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000...