文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 1049. 最后一块石头的重量
题目链接:1049. 最后一块石头的重量 II - 力扣(LeetCode)
代码如下:
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(target+1,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-2*dp[target];
}
};
LeetCode 494. 目标和
代码如下:
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int target) {
int sum=0;
for(int i=0;i<nums.size();i++)sum+=nums[i];
int res=(sum-target)/2;
if(abs(target)>sum)return 0;
if((sum-target)%2==1)return 0;
vector<int>dp(res+1,0);
dp[0]=1;
for(int i=0;i<nums.size();i++){
for(int j=res;j>=nums[i];j--){
dp[j]+=dp[j-nums[i]];
}
}
return dp[res];
}
};
解题代码如下(下面代码来自代码随想录 (programmercarl.com)):
LeetCode 474.一和零
解题代码如下:
class Solution {
public:
int findMaxForm(vector<string>& strs, int m, int n) {
vector<vector<int>>dp(m+1,vector<int>(n+1,0));
for(string str:strs){
int onenums=0,zeronums=0;
for(char c:str){
if(c=='1')onenums++;else zeronums++;
}
for(int i=m;i>=zeronums;i--){
for(int j=n;j>=onenums;j--){
dp[i][j]=max(dp[i][j],dp[i-zeronums][j-onenums]+1);
}
}
}
return dp[m][n];
}
};