欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零

31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零

2024/10/24 1:52:05 来源:https://blog.csdn.net/weixin_51952055/article/details/140347131  浏览:    关键词:31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int stone : stones) sum += stone;int bagSize = sum /2;vector<int> dp(bagSize + 1, 0);for(int i = 0; i < stones.size(); i++){ //遍历物品for(int j = bagSize; j >= stones[i]; j--){ //遍历背包dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return sum - 2*dp[bagSize];}
};

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int ans = 0, sum = 0;for(int num : nums) sum += num;if((sum - target) % 2 != 0 || abs(sum) < abs(target)) return 0;int bagSize = (sum - target)/2;// dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法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];}
};

本题中strs 数组里的元素就是物品,每个物品都是一个!而m 和 n相当于是一个背包,两个维度的背包 注意理解题目中最大子集长度的含义!!!!!!

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {// dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); //默认初始化0for(string str : strs){ //遍历物品int zeroNum = 0, oneNum= 0;for(char c : str){if(c == '0') zeroNum++;else oneNum++;}for(int i = m; i >= zeroNum; i--){ //遍历背包容量且从后向前遍历!for(int j = n; j >= oneNum; j--){dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);}}}return dp[m][n];}
};

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com