这题有点难,很难想出要让两个集合的和相等,那就是要使原来的集合之和能被2整除,将原来的数分为两个背包,将原来的集合放入背包,如果将背包填满,那就可以被分割子集。
class Solution {
public boolean canPartition(int[] nums) {
if(nums==null||nums.length==0)
{
return false;
}
Arrays.sort(nums);
int coount=0;
for(int i=0;i<nums.length;i++)
{
coount+=nums[i];
}
if(coount%2!=0)
{
return false;
}
int da=coount/2;
int [] dp=new int [da+1];
for(int i=1;i<nums.length;i++)
{
for(int j=da;j>=nums[i];j--)
{
dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i]);
}
}
if(dp[da]==da)
{
return true;
}
return false;
}
}
总结:背包问题有点难,本题很难想出要分割成两个包。