1049. 最后一块石头的重量 II
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
vector<int> f(30010,0);
int sum=accumulate(stones.begin(),stones.end(),0);
int target = sum/2;
for(int i=0;i<stones.size();i++){
for(int j=target;j>=stones[i];j--){
f[j]=max(f[j],f[j-stones[i]]+stones[i]);
}
}
return max(sum-f[target]-f[target],0);
}
};
494. 目标和
文章来源:https://uudwc.com/A/AAkDa
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int S) {
int sum = 0;
for (int i = 0; i < nums.size(); i++) sum += nums[i];
if (abs(S) > sum) return 0; // 此时没有方案
if ((S + sum) % 2 == 1) return 0; // 此时没有方案
int bagSize = (S + 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. 一和零
class Solution {
public:
int findMaxForm(vector<string>& strs, int m, int n) {
int onenum[610]={0};
int zeronum[610]={0};
for(int i=0;i<strs.size();i++){
for(int j=0;j<strs[i].size();j++){
if(strs[i][j] =='1') onenum[i]++;
else zeronum[i]++;
}
}
int f[110][110]={0};
for(int k=0;k<strs.size();k++){
for(int i=m;i>=zeronum[k];i--){
for(int j=n;j>=onenum[k];j--){
f[i][j] = max(f[i][j],f[i-zeronum[k]][j-onenum[k]]+1);
}
}
}
return f[m][n];
}
};
文章来源地址https://uudwc.com/A/AAkDa