Last updated on 2023年9月16日 中午
416. 分割等和子集(C++动态规划实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class Solution { public: bool canPartition(vector<int>& nums) {
vector<int> dp(10001, 0);
int sum = 0; for(int i = 0;i < nums.size();i++){ sum += nums[i]; }
if(sum % 2 == 1){ return false; }
int target = sum / 2;
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; } };
|
1049. 最后一块石头的重量 II(C++动态规划实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public: int lastStoneWeightII(vector<int>& stones) {
int sum = 0; for(int i = 0;i < stones.size();i++){ sum += stones[i]; }
int target = sum / 2;
vector<int> dp(1501, 0);
for(int i = 0;i < stones.size();i++){ for(int j = target;j >= stones[i];j--){ dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]); } }
return sum - dp[target] - dp[target]; } };
|
494. 目标和(C++动态规划实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| class Solution { public: int findTargetSumWays(vector<int>& nums, int target) {
int sum = 0; for(int i = 0;i < nums.size();i++){ sum += nums[i]; }
if(sum < abs(target)){ return 0; }
if((target + sum) % 2 == 1){ return 0; }
int bagSize = (target + sum) / 2; vector<int> dp(bagSize + 1, 0); dp[0] = 1;
for(int i = 0;i < nums.size();i++){ for(int j = bagSize;j >= nums[i];j--){ dp[j] += dp[j - nums[i]]; } }
return dp[bagSize]; } };
|
leetcode-notes-20230916
https://thewangyang.github.io/2023/09/16/leetcode-notes-20230916/