背包问题
https://programmercarl.com/背包理论基础01背包-1.html
https://programmercarl.com/背包理论基础01背包-2.html#一维dp数组-滚动数组
416. 分割等和子集
题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/
代码:
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum = 0;
for(int i = 0; i < nums.size(); i++)
{
sum += nums[i];
}
if(sum % 2 == 1)
return false;
sum = sum/2;
// dp[i]中的i表示背包内总和
vector<int> dp(10001 ,0);
for(int i = 0; i < nums.size() ; i++)
{
//why j >= nums[i]:因为如果小于nums[i]的话 说明这个容量为j的背包连nums[i]都放不下 就没必要继续写了
for(int j = sum ;j >= nums[i];j--)
{
dp[j] = max(dp[j - nums[i]] + nums[i],dp[j]);
}
}
if(dp[sum] == sum)
return true;
else return false;
}
};