您的位置:首页 > 其它

POJ 2181 JUMPING COWS(DP)

2011-08-19 20:01 381 查看
原文: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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: