目标和(超级妙的背包问题)
创始人
2024-11-11 07:07:29
0

494. 目标和

给你一个非负整数数组 nums 和一个整数 target

向数组中的每个整数前添加 '+''-' ,然后串联起所有整数,可以构造一个 表达式

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例 1:

**输入:**nums = [1,1,1,1,1], target = 3 **输出:**5 **解释:**一共有 5 种方法让最终目标和为 3 。 -1 + 1 + 1 + 1 + 1 = 3 +1 - 1 + 1 + 1 + 1 = 3 +1 + 1 - 1 + 1 + 1 = 3 +1 + 1 + 1 - 1 + 1 = 3 +1 + 1 + 1 + 1 - 1 = 3 

示例 2:

**输入:**nums = [1], target = 1 **输出:**1 

提示:

  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 1000
  • 0 <= sum(nums[i]) <= 1000
  • -1000 <= target <= 1000

想了好一会才找到思路,转换一下题目就是找到两个子数组,和分别为 sum 和 sum + target,这样就可以抵消了

class Solution { public:     int findTargetSumWays(vector& nums, int target) {         int sum = 0;         for (auto u : nums) {             sum += u;         }         int a = sum - target;         if (a & 1) return 0;         if (a < 0) return 0;         int bag = a / 2;         vector dp(bag + 1, 0);         dp[0] = 1;         for (auto u : nums) {             for (int j = bag; j >= u; j--) {                 dp[j] += dp[j - u];             }         }         return dp[bag];     } }; 

相关内容

热门资讯

微扑克教程!wepoker正确... 微扑克教程!wepoker正确养号方法德州辅助app安卓版最新版更新内容(其实真的有挂)1、进入游戏...
我来教教你!aapoker透视... 我来教教你!aapoker透视插件HHpoker一直输有挂吗(本来真的有挂)1、aapoker透视插...
切实教程!wepoker好友房... 切实教程!wepoker好友房开挂HHpoker辅助开挂方法(一直真的有挂);1、每一步都需要思考,...
技巧教程!wepoker模拟器... 技巧教程!wepoker模拟器哪个好用AApoker最厉害四个辅助(原来真的有挂);1、游戏颠覆性的...
透明挂教程!!智星德州插件怎么... 透明挂教程!!智星德州插件怎么下载wepoker透视软件多少钱(总是真的有挂)1、全新机制【智星德州...
介绍教程!购买wepoker模... 介绍教程!购买wepoker模拟器大头大菠萝可以开挂吗(就是真的有挂);1、首先打开购买wepoke...
第三方教程!哈糖大菠萝辅助器w... 第三方教程!哈糖大菠萝辅助器wepoker德州作弊辅助挂(都是真的有挂);1、每一步都需要思考,不同...
总结教程!拱趴大菠萝作弊方法w... 总结教程!拱趴大菠萝作弊方法wepoker辅助软件下载(一贯真的有挂);1、这是跨平台的拱趴大菠萝作...
必备教程!wepoker数据分... 必备教程!wepoker数据分析wepokerplus辅助作弊(果然真的有挂)1、wepoker数据...
解密教程!黑侠破解wepoke... 解密教程!黑侠破解wepokerwepoker辅助器怎么用(一贯真的有挂)1、下载好黑侠破解wepo...