为什么朴素的DP会有WA啊?不应该错的全是TLE吗。所以我认为我的代码仍然有问题且不为优化。
#include <bits/stdc++.h>
using namespace std;
int a[500100];
int f[500100];//f[i]以a[i]为结尾的最长的子序列的长度
int n;
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
for(int i=1; i<=n; i++) {
f[i]=1;
}
for(int i=1; i<=n; i++) {
for(int j=1; j<i; j++) {
// printf("\nIn %d(%d) and %d(%d):",a[i],i,a[j],j);
// int tmp=f[i];
if(f[j]%2==0 and a[j]!=a[i]) {
// cout<<"1"<<" ";
f[i]=max(f[i],f[j]+1);
} else if(f[j]%2==1 and a[j]==a[i]) {
// cout<<"2"<<" ";
f[i]=max(f[i],f[j]+1);
}
// printf(",and the result from %d change to %d",tmp,f[i]);
}
}
// cout<<endl;
// for(int i=1;i<=n;i++){
// cout<<f[i]<<" ";
// }
// cout<<endl;
if(f[n]%2!=0) {
printf("%d",f[n]-1);
} else {
printf("%d",f[n]);
}
return 0;
}
