欢迎光临
我们一直在努力

416. 分割等和子集c

22号就要复试了,专业课,英语都还没搞,我的吗,先每天刷10道旧题在刷新题把。

int max(int i,int j){
    if(i>j) return i;
    return j;
}

bool canPartition(int* nums, int numsSize) {
    int sum=0;
    for(int i=0;i<numsSize;i++){
        sum+=nums[i];
    }
    if(sum%2!=0) return false;
    int size=sum/2;
    int** dp=(int**)malloc(sizeof(int*)*numsSize);
    for(int i=0;i<numsSize;i++) dp[i]=(int*)malloc(sizeof(int)*(size+1));
    for(int i=0;i<numsSize;i++) dp[i][0]=0;
    for(int i=nums[0];i<=size;i++) dp[0][i]=nums[0];
    for(int i=1;i<numsSize;i++){
        for(int j=1;j<=size;j++){
            if(nums[i]>j){
                dp[i][j]=dp[i-1][j];
            }else{
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-nums[i]]+nums[i]);
            }
            if(dp[i][j]==sum/2) return true;
        }
    }    
    return false;
}

结果:

未经允许不得转载:大有博文 » 416. 分割等和子集c
分享到: 更多 (0)

大前端WP主题 更专业 更方便

联系我们联系我们