Вот о чем говорит ваша проблема:
Последовательность чисел называется зигзагообразной последовательностью, если различия между последовательными числами строго чередуются между положительными и отрицательными. Первое различие (если оно существует) может быть положительным или отрицательным. Последовательность с менее чем двумя элементами тривиально является зигзагообразной последовательностью.
Например, 1,7,4,9,2,5 - зигзагообразная последовательность, потому что различия (6, -3,5, -7,3) попеременно положительны и отрицательны. Напротив, 1,4,7,2,5 и 1,7,4,5,5 не являются зигзагообразными последовательностями: первое, потому что его первые две разницы положительны, а второе, потому что его последнее различие равно нулю.
Учитывая последовательность целых чисел, последовательность, возвращает длину самой длинной подпоследовательности последовательности, которая является зигзагообразной последовательностью. Подпоследовательность получается удалением некоторого количества элементов (возможно, нуля) из исходной последовательности, оставляя оставшиеся элементы в их первоначальном порядке.
Это полностью отличается от того, что вы описали в своем посте. Следующее решает актуальную проблему topcoder.
dp[i, 0] = maximum length subsequence ending at i such that the difference between the
last two elements is positive
dp[i, 1] = same, but difference between the last two is negative
for i = 0 to n do
dp[i, 0] = dp[i, 1] = 1
for j = 0 to to i - 1 do
if a[i] - a[j] > 0
dp[i, 0] = max(dp[j, 1] + 1, dp[i, 0])
else if a[i] - a[j] < 0
dp[i, 1] = max(dp[j, 0] + 1, dp[i, 1])
Пример:
i = 0 1 2 3 4 5 6 7 8 9
a = 1 17 5 10 13 15 10 5 16 8
dp[i, 0] = 1 2 2 4 4 4 4 2 6 6
dp[i, 1] = 1 1 3 3 3 3 5 5 3 7
^ ^ ^ ^
| | | -- gives us the sequence {1, 17, 5, 10}
| | -- dp[2, 1] = dp[1, 0] + 1 because 5 - 17 < 0.
| ---- dp[1, 0] = max(dp[0, 1] + 1, 1) = 2 because 17 - 1 > 0
1 element
nothing to do
the subsequence giving 7 is 1, 17, 5, 10, 5, 16, 8, hope I didn't make any careless
mistakes in computing the other values)
Тогда просто возьмите максимум обоих dp
массивов.