01 dp B010 LC 分割等和子集(裸題)

2021-10-08 11:55:02 字數 723 閱讀 1285

給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。

注意:每個陣列中的元素不會超過 100

陣列的大小不會超過 200

示例 1:

輸入: [1, 5, 11, 5]

輸出: true

解釋: 陣列可以分割成 [1, 5, 5] 和 [11].

示例 2:

輸入: [1, 2, 3, 5]

輸出: false

解釋: 陣列不能分割成兩個元素和相等的子集.

方法一:dp

思考

首先這題想到揹包就不難吧,將數總和 s 分成兩半的問題轉化就是能否將小為 s/2 的揹包填滿

首先如果結合的總和 s % 2 ≠

0\not= 0

​=0

的話,直接 return false

思考初始化:思考狀態轉移方程

思考輸出:f[c

ap

]f[cap]

f[cap]

class

solution

}return f[cap];}

};

複雜度分析

leetcode 分割等和子集(01揹包)

給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 fals...

0 1揹包問題 416 分割等和子集

1 狀態 揹包容量 可選擇的物品 2 選擇 裝或者不裝 3 定義dp陣列 dp i j x,前i個物品,容量為j時的揹包。x為true false 4 初始化 在沒有任何物品裝入時的合法狀態 要求恰好裝滿 dp i 0 只有容量為0的揹包才能滿足 沒有要求恰好裝滿 dp 0 i 即沒有任何物品放入 ...

Leetcode416 分割等和子集 01揹包變種

暴力解法 public final boolean canpartition1 int nums 剪枝 int sum 0 int max 0 for int i 0 i nums.length i if sum 2 0 int target sum 2 if max target if max t...