原文:http://blog.acmj1991.com/?p=611
题意:给你一些数,让你找出一个子序列,子序列计算的规则是:奇数位相加偶数位相减。要求这个子序列计算的值最大为多少
思路:开始是开了两个数组计算的然后超时了……..对这个数列画出图可以看到遇到波峰就相加遇到波谷就想减最后能得到最大值
#include<stdio.h>
#include<string.h>
#define maxN 150010
int key[maxN];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&key[i]);
int sum=0,flag=0;
for(int i=1;i<=n;i++)
if(key[i]>=key[i-1]&&key[i]>=key[i+1]&&!flag)
sum+=key[i],flag=1;
else if(key[i]<=key[i-1]&&key[i]<=key[i+1]&&flag)
sum-=key[i],flag=0;
printf("%d\n",sum);
}