力扣 416 分割等和子集 01揹包 暴力

2021-10-24 09:49:40 字數 892 閱讀 5199

思路一:dpdp

dp,首先計算陣列元素的和,如果為奇數則一定不能滿足題意,否則子集的和就等於總和的一半,假設為hal

fhalf

half

,那麼問題轉換成:是否可以從陣列中任取一些數字使得它們的和為hal

fhalf

half

。01

0101

揹包可解,dp[

i]=1

dp[i]=1

dp[i]=

1說明可以組成i

ii這個數,否則說明不能組成i

ii這個數,那麼對於陣列中的每個元素v

vv都有,dp[

i]=d

p[i−

v]∣∣

dp[i

]dp[i]=dp[i-v]||dp[i]

dp[i]=

dp[i

−v]∣

∣dp[

i],其中v

<=i

<=h

alfv<=i<=half

v<=i

<=h

alf。

class

solution

return0;}};

思路二:爆搜+剪枝。

class

solution

bool

dfs(

int tar,

int idx,vector<

int>

& nums)

return0;}};

力扣 416 分割等和子集

最好用dp做,dfs會超時 package leetcode dp動態規劃 dp前先處理一下,對於下述兩種情況直接判false dp i j 表示下標在0.i之間的元素值之和是否等於j public class leetcode416 boolean res canpartition nums sy...

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

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

揹包問題 416 分割等和子集

0 1揹包問題。dp陣列中dp i w 的含義。dp i w 的定義如下 對於前i個物品,當前揹包的容量為w,這種情況下可以裝的最大價值是dp i w 如果你沒有把這第i個物品裝入揹包,那麼很顯然,最大價值dp i w 應該等於dp i 1 w 如果你把這第i個物品裝入了揹包,那麼dp i w 應該...