416. Partition Equal Subset Sum Medium
来源:互联网 发布:淘宝网军用皮鞋女式 编辑:程序博客网 时间:2024/06/05 02:43
这道题要求把一组数分成相等的两部分,实际上是求数组中是否有子集等于特定值(这里特定值为所有数和的一半)。
那么考虑子问题,数组中是否有子集等于target。我们用动态规划。
主要思想:对于数组中的每个数,我们有取或不取两种选择,实际上是背包问题。设d[i][j]表示前i个数和为j的方案数,所以有状态转移方程:d[i][j] = d[i - 1][j] + d[i - 1][j - nums[i - 1]]。当j < nums[i - 1]时,d[i][j] = d[i - 1][j] (不能取)。i - 1的意思是,前i个数,那么第i个数的下标就是i -1。
class Solution {public: bool canPartition(vector<int>& nums) { int target = 0; for(int i = 0; i < nums.size(); i++) target += nums[i]; if(target % 2 == 1)return false; target /= 2; int d[nums.size() + 1][target + 1]; for (int i = 0; i < nums.size() + 1; ++i) { for (int j = 0; j < target + 1; ++j){ if(j == 0)d[i][j] = 1; else if(i == 0)d[i][j] = 0; else if(j < nums[i - 1])d[i][j] = d[i - 1][j]; else d[i][j] = d[i - 1][j] + d[i - 1][j - nums[i - 1]]; } } return d[nums.size()][target] != 0? true: false; }};
阅读全文
0 0
- Leetcode 416. Partition Equal Subset Sum[medium]
- 416. Partition Equal Subset Sum -Medium
- 416. Partition Equal Subset Sum Medium
- 416. Partition Equal Subset Sum Medium
- [Medium]Partition Equal Subset Sum
- LeetCode [416. Partition Equal Subset Sum] 难度[medium]
- Leetcode 416. Partition Equal Subset Sum (Medium) (cpp)
- 416. Partition Equal Subset Sum 类别:动态规划 难度:medium
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 设计模式(2)-抽象工厂模式
- 【Math】希腊符号及读法
- 有序广播和无序广播案列
- MySQL忘记密码的解决办法
- eclipse web项目出现jsp不能导入自定义的java类
- 416. Partition Equal Subset Sum Medium
- MVC FluentValidation 验证开发
- App的启动过程(9)surfaceflinger对vsync的处理
- 动态绑定
- vs2013 无法找到xx.exe的调试信息
- Jquery选择器以及JQuery属性获取 attr
- 面向对象的六大设计原则
- 使用nsenter和容器交互
- Linux的SOCKET编程详解