本文共 909 字,大约阅读时间需要 3 分钟。
给出一个序列,求最长的子序列,满足隔位的两个数相等,问这个最长的子序列的长度是多少。
#include#include #include #include #define MAX 4007using namespace std;int dp[MAX][MAX];int a[MAX],n;int main ( ){ while ( ~scanf ( "%d" , &n ) ) { for ( int i = 1 ;i <= n ; i++ ) scanf ( "%d" , &a[i] ); int ans = 1; for ( int i = 1 ; i <= n ; i++ ) { int k = -1; for ( int j = 1 ; j < i ; j++ ) { if ( k == -1 ) dp[i][j] = 2; else dp[i][j] = dp[j][k] + 1; if ( a[j] == a[i] ) k = j; ans = max ( ans , dp[i][j] ); } } printf ( "%d\n" , ans ); }}
转载地址:http://jqvjn.baihongyu.com/