这题我一看就是要用dp来做的
用dp[i][j]来表示,奇数位上是 i ,偶数位上 j 的最长序列。
- a[i]这个数作为X,j从1到c遍历,如果dp[j][X]是奇数那么dp[j][X]+1
- 如果dp[X][j]是偶数,那么dp[X][j]+1
那么最后答案就是最大的dp
for(int i=1;i<=n;i++) {
cin>>a[i];
for(int j=1;j<=c;j++){
if(a[i]!=j){
if(dp[a[i]][j]%2==0) dp[a[i]][j]++;
if(dp[j][a[i]]%2==1) dp[j][a[i]]++;
}
}
}
但是这题也可以更简单的去想,不管X是偶数为上还是奇数位上,他都只是序列的最后一位,也就是说可以直接这样写
for(int j=1;j<=C;j++)
{
dp[X][j]=dp[j][X]+1;
if(X!=j)
ans=max(ans,dp[X][j]);
}
总之,这题思路出的很快,但是我觉得可以不是很好过最后连交都没交