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