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;
}
结果:
标签:分割,return,nums,int,max,sum,416,子集,dp From: https://www.cnblogs.com/llllmz/p/18068328