1049最后一块石头的重量2
class Solution {
public:
int lastStoneWeightII(vector<int>& stones)
{
vector<int>dp(15001,0);
int sum=0;
for(int a:stones)sum+=a;
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-2*dp[target];
}
};
474目标和
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int target) {
int sum=0;
for(int a:nums)sum+=a;
if(abs(target)>sum) 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];
}
};
474 1和0 奇妙
class Solution {
public:
int findMaxForm(vector<string>& strs, int m, int n) {
vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0));
for(int i=0;i<strs.size();i++)
{
int oneNum = 0, zeroNum = 0;
for (char c:strs[i])
{
if (c == '0') zeroNum++;
else oneNum++;
}
for(int j=m;j>=zeroNum;j--)
{
for(int k=n;k>=oneNum;k--)
{
dp[j][k]=max(dp[j][k],dp[j-zeroNum][k-oneNum]+1);
}
}
}
return dp[m][n];
}
};