//问题描述:在给出的一串整形数组中,相邻的数据不能进行相加,求出这串数据的最大和
//返回: 最大的和
//参数:int *nums 整形数组
//参数:int numsSize 数组的个数
int massage(int *nums, int numsSize)
{
//对传入的参数进行判断
if(numsSize == 0) return 0;
if(numsSize == 1) return nums[0];
if(numsSize == 2) return nums[0] > nums[1] ? nums[0] : nums[1];
//动态分配一个空间
int *dp = (int *)malloc(sizeof(int) * numsSize);
dp[0] = nums[0];
dp[1] = nums[1];
dp[2] = dp[0] + nums[2];
for(int i = 3; i < numsSize; i++)
{
int max = dp[i - 2] > dp[i - 3] ? dp[i - 2] : dp[i - 3];
dp[i] = num[i] + max;
}
return dp[numsSize - 1] > dp[numsSize - 2] ? dp[numsSize - 1] : dp[numsSize - 2];
}
总体的代码流程是上面的那样,假如让我来想比较难能想的出来。在这里把他写出来是让自己学习,还有时间就拿出来看下,其中在for循环中的思想还没有完全了解
补充:
假如 int buff[5] = {1, 2, 3, 6, 7};
思路:当要加4个数’6’时,则要判断前面的累加最大的数来和6相加,当要对第5个数进行相加时,就要对数字‘6’(不包含数字‘6’)前的最大的数来和数字‘7’进行相加。