题目:求数组中不相邻的数和的最大值。
例如:1,3,5,2,6
最大值是:5+6=11
#include <stdio.h>
int a[5] = {1,3,5,2,6};
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int i;
int sum[5] = {0};
sum[0]=0;
sum[1]=1;
for(i=2; i < sizeof(a)/sizeof(int); i++){
sum[i] = max(sum[i-2]+a[i], sum[i-1]);
}
printf("===>%d\n",sum[i-1]);
return 0;
}
算法思想:采用一个求和数组,sum[i-1]表示a[i]前的元素中已经求得的最大和;
然后得出一个等式:sum[i] = max(sum[i-2]+a[i], sum[i-1]);