算法设计与应用基础:第十三周(3)
来源:互联网 发布:手机音乐转调软件 编辑:程序博客网 时间:2024/06/05 19:40
416. Partition Equal Subset Sum
DescriptionHintsSubmissionsSolutions
- Total Accepted: 19709
- Total Submissions: 51075
- Difficulty: Medium
- Contributor: LeetCode
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
Note:
- Each of the array element will not exceed 100.
- The array size will not exceed 200.
解题思路:套用模型背包问题,此题中重量和价值都为数字之和,这样可以得出状态转移方为dp[i][j]=max(dp[i-1][j],dp[i-1][j-nums[i]]+nums[i]),dp[i][j]表示到第i+1个元素之前,在最大和不大于j的情况下能得到的最大值,最后的答案dp[nums,size()-1][tar]==tar即为答案,tar为数组总和的一半。代码如下:
bool canPartition(vector<int>& nums) { if(nums.empty()) return false; else { int size=nums.size(); int tar=0; for(int i=0;i<size;i++) tar+=nums[i]; if(tar%2!=0) return false; else { tar=tar/2; int dp[size][tar+1]; memset(dp,0,sizeof(dp)); for(int i=0;i<size;i++) { if(i==0) { for(int p=0;p<tar+1;p++) { if(p>=nums[i]) dp[i][p]=nums[i]; else dp[i][p]=0; } } else { for(int p=0;(p<tar+1);p++) if(p-nums[i]>=0) dp[i][p]=max(dp[i-1][p],dp[i-1][p-nums[i]]+nums[i]); } } return dp[size-1][tar]==tar; } } }后记:模型解题法,对于取元素的背包问题模型是很好地一种解题思路,首先分清是简单背包问题还是完全背包问题。
阅读全文
0 0
- 算法设计与应用基础:第十三周(3)
- 算法设计与应用基础:第十三周
- 算法设计与应用基础:第十三周(1)
- 算法设计与应用基础:第十三周(2)
- 算法设计与应用基础-第十三周&十四周
- 算法设计与结构基础作业第十三周
- 算法设计与应用基础: 第三周(3)
- 算法设计与应用基础-第二周
- 算法设计与应用基础:第三周
- 算法设计与应用基础-第三周
- 算法设计与应用基础-第五周
- 算法设计与应用基础:第五周
- 算法设计与应用基础-第六周
- 算法设计与应用基础:第六周
- 算法设计与应用基础:第七周
- 算法设计与应用基础-第七周
- 算法设计与应用基础-第八周
- 算法设计与应用基础:第八周
- 如何才能高效的自学?
- 选择排序
- 《深入理解java虚拟机》学习笔记5——Java Class类文件结构
- CentOS 6.5 中文输入法设置
- 笔记
- 算法设计与应用基础:第十三周(3)
- pandas.dataframe中根据条件获取元素所在的位置(索引)
- 【使用技巧】VS2012常用快捷键
- 27. Struts2运行流程分析
- 三角形
- WCF 入门 通信
- ffmpeg 接收解码rtp h264视频流
- 刷清橙OJ--A1029.补充函数
- 实训周三