动态规划 part 04
动态规划 01背包
● 416. 分割等和子集
416. 分割等和子集
法1:动态规划
//dp[j]表示
// 背包总容量(所能装的总重量)是j,放进物品后,背的最大重量为dp[j]
//如果背包容量为target, dp[target]就是装满 背包之后的重量
bool canPartition(vector<int>& nums) {
int sum = 0;
for (const auto &item: nums)
sum += item;
if (sum % 2 == 1) return false;
int target = sum / 2;
vector<int>dp(10001,0);
for (int i = 0; i < nums.size(); ++i) {
for (int j = target; j >= nums[i]; --j) {
dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
}
}
if (dp[target] == target)return true;
return false;
// int sum = accumulate(nums.begin(), nums.end(), 0);
}