leetcode:416.分割等和子集【01背包】【动态规划】
学习要点
- 灵活使用背包思想
- 进一步理解动态规划
题目链接
416. 分割等和子集 - 力扣(LeetCode)
题目描述
解法:动态规划
class Solution {
public:bool canPartition(vector<int>& nums) {int n = nums.size();int sum = accumulate(nums.begin(),nums.end(),0);if( sum % 2 != 0)return false;int avg = sum / 2; //背包最大容量vector<vector<int>> dp(n,vector<int>(avg+1));for(int i = 0; i<= avg; i++){if(i >= nums[0]){dp[0][i] = nums[0];}}for(int i =1;i<=n-1;i++){for(int j =1;j<=avg;j++){if(nums[i] > j){dp[i][j] = dp[i-1][j];}else{dp[i][j] = max(dp[i-1][j],dp[i-1][j-nums[i]] + nums[i]);}}}return dp[n-1][avg] == avg;}
};