代码随想录第二十三天|1049.最后一块石头的重量Ⅱ,494.目标和,474.一和零_baozu的博客-爱代码爱编程
1049. 最后一块石头的重量 II - 力扣(Leetcode)
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
vector<int>dp(15001,0);
int sum=0;
for(int i=0;i<stones.size();i++)
sum+=stones[i];
int target=sum/2;
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];
}
};
不太懂,先照着打吧
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(abs(target)>sum)
return 0;
if((target+sum)%2==1)
return 0;
int bagSize=(target+sum)/2;
if(bagSize<0)
return 0;
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];
}
};
😵,二刷再看看
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 oneNum=0,zeroNum=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];
}
};