这里有一堆物资待分配,物资总数量不超过200(
),每件物资重量不超过100(
)。 
   请问是否可以将这堆物资分配给两个队伍,使得两个队伍的全部的物资重量和相等。 
                                        class Solution: def canPartition(self , nums): # write code here if nums == []: return True if sum(nums) % 2 == 1: return False target = int(sum(nums) / 2) dp = [True] + [False] * target for i, num in enumerate(nums): for j in range(target, num - 1, -1): dp[j] |= dp[j - num] return dp[target]
class Solution {
public:
    /**
     * 
     * @param nums int整型一维数组 
     * @param numsLen int nums数组长度
     * @return bool布尔型
     */
  
    int dp[10000000];
    bool canPartition(int* nums, int numsLen) {
       int sum=0;
        for(int i=0;i<numsLen;i++)
            sum+=nums[i];
        if(sum%2!=0)
            return false;
        else
        {
            sum/=2;
            for(int i=0;i<numsLen;i++)
                for(int j=sum;j>=nums[i];j--)
                {
                    //if(j-nums[i]>=0)
                    dp[j]=max(dp[j],dp[j-nums[i]]+nums[i]);
                }
            if(sum==dp[sum])
                return true;
            else
                return false;
        }
        //return true;
    }
}; class Solution {
public:
    /**
     * 
     * @param nums int整型一维数组 
     * @param numsLen int nums数组长度
     * @return bool布尔型
     */
    int sum(int* nums,int numsLen){
        int sum_=0;
        for(int i=0;i<numsLen;i++){
            sum_+=nums[i];
        }
        return sum_;
    }
    /**
     * 
     * @param nums int整型一维数组 
     * @param numsLen int nums数组长度
     * @return bool布尔型
     */
    bool canPartition(int* nums, int numsLen ) {
        // write code here
        int sums=sum(nums,numsLen);
        //printf("%d   %d",sums,numsLen);
        if(numsLen<2) return 0;
        if(sums%2==1) return 0;
        int target=sums/2;
        bool dp[target+1];
        dp[0]=true;
        for(int i=1;i<target+1;i++){
            dp[i]=false;
        }
        for(int i=0;i<numsLen && !dp[target];i++){
            if(nums[i]<=target){
                for(int j=target;j>=0;j--){
                    if(dp[j]&&j+nums[i]<=target){
                        dp[j+nums[i]]=1;
                    }
                }
            }
        }
        return dp[target];
    }
};