这里有一堆物资待分配,物资总数量不超过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]; } };