DP,最長單調子序列的變形。
#include <stdio.h>
int dp[1010][2];
int nums[1010];
int get_max(int a, int b) {
if (a>b)
return a;
else
return b;
}
int main() {
int i,j,n;
int ans;
scanf("%d",&n);
while (n!=0) {
for (i=1;i<=n;i++) {
scanf("%d",&nums[i]);
dp[i][0]=0; // even
dp[i][1]=1; // odd
}
ans=0;
for (i=1;i<=n;i++) {
for (j=1;j<i;j++) {
if (nums[j]>nums[i])
dp[i][0]=get_max(dp[i][0], dp[j][1]+1);
if (nums[j]<nums[i])
dp[i][1]=get_max(dp[i][1], dp[j][0]+1);
}
ans=get_max(ans,get_max(dp[i][0],dp[i][1]));
}
printf("%d\n", ans);
scanf("%d",&n);
}
return 0;
}