题目:http://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493
Problem Statement |
|||||||||||||
A sequence of numbers is called a zig-zag sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with fewer than two elements is trivially a zig-zag sequence. For example, 1,7,4,9,2,5 is a zig-zag sequence because the differences (6,-3,5,-7,3) are alternately positive and negative. In contrast, 1,4,7,2,5 and 1,7,4,5,5 are not zig-zag sequences, the first because its first two differences are positive and the second because its last difference is zero. Given a sequence of integers, sequence, return the length of the longest subsequence of sequence that is a zig-zag sequence. A subsequence is obtained by deleting some number of elements (possibly zero) from the original sequence, leaving the remaining elements in their original order. |
|||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
Constraints |
|||||||||||||
- | sequence contains between 1 and 50 elements, inclusive. | ||||||||||||
- | Each element of sequence is between 1 and 1000, inclusive. | ||||||||||||
Examples |
|||||||||||||
0) | |||||||||||||
|
|||||||||||||
1) | |||||||||||||
|
|||||||||||||
2) | |||||||||||||
|
|||||||||||||
3) | |||||||||||||
|
|||||||||||||
4) | |||||||||||||
|
|||||||||||||
5) | |||||||||||||
|
代码实现:
这个问题类似求最长非降子序列,代码有点水。。。主要不知道那里怎么提交测试,就按自己的来了
n = int(input())
a = []
b = []
f = [1]*(n-1)
for i in range(n):
r = int(input())
a.append(r)
if n == 1:
print(1)
elif n == 2:
print(2)
def sub(a,b):
if a>=b:
return 1
else:
return -1
for i in range(1,n):
b.append(sub(a[i],a[i-1]))
for i in range(b.__len__()):
for j in range(i):
if f[i] < f[j]:
f[i] = f[j]
if (b[i]*b[j])==-1 and f[i] < f[j] + 1:
f[i] = f[j] + 1
print(f)