题干出现“接或不接”,“最优”,仔细一想,该用动态规划了。
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int massage(int* nums,int numSize)
{
if(numSize == 0)
return 0;
else if(numSize == 1)
return nums[0];
else
{
int dp[numSize] = {0};//记录每一种选择的等待时间
dp[0] = nums[0];
dp[1] = max(nums[0],nums[1]);//选第二个数或者不选,比较其大小
/*如果不选第i个,那么结果dp[i]==dp[i-1],
如果选了,那么就不能选第i-1个(因为相邻),
此时应该加上第i-2个*/
for(int i = 2;i<numSize;i++)
dp[i] = max(dp[i-1],dp[i-2]+nums[i]);
return dp[numSize-1];//选到最后一定是最大的数,因为一直在用max函数
}
}
int main()
{
int nums[] = {2,1,4,5,3,1,1,3};
int numSize = 8;
int wait = massage(nums,numSize);
printf("%d",wait);
return 0;
}