现在的位置: 首页 > 综合 > 正文

POJ 2181-Jumping Cows

2013年09月01日 ⁄ 综合 ⁄ 共 612字 ⁄ 字号 评论关闭

题目:

http://poj.org/problem?id=2181

大意:

给你n个数,让你找出一个子序列,子序列计算的规则是:奇数次运算则加上这个数,偶数次运算就减去这个数。

求这个子序列的最大值。

思路:

跟物理上的波一样:

如果为区间最大值,则为波峰。则相加。

如果为区间最小值,则为波谷。则想减。

用一个bool的值标记该加或者该减即可。

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int cow[150010];

int main()
{
	int n, sum;
	bool pause; //标记奇偶数行
		memset(cow, 0, sizeof(cow));
		scanf("%d", &n);
		for(int i = 1; i <= n; ++i)
			scanf("%d", &cow[i]);
		pause = 0;
		sum = 0;
		for(int i = 1; i <= n; ++i)
		{
			if(cow[i] >= cow[i - 1] && cow[i] >= cow[i + 1] && !pause) //查找区间最大值
			{
				sum += cow[i];

				pause = 1;
			}
			else if(cow[i] <= cow[i - 1] && cow[i] <= cow[i + 1] && pause) //查找区间最小值
			{
				sum -= cow[i];
				pause = 0;
			}
		}
		printf("%d\n", sum);
	return 0;
}

抱歉!评论已关闭.