RT,代码感觉没有大问题,关键注释已经写了,求大佬调!
#include <iostream>
using namespace std;
int n , a[1005] , dp[1005][1005] , ans=0 ;
// dp[i][j]表示的是数列第i位放的是原数组的j位的数组
int main () {
cin >> n ;
for ( int i = 1 ; i <= n ; i++ )
cin >> a[i] ;
dp[0][0] = 0 ;
for ( int i = 1 ; i <= n ; i++ )
for ( int j = 1; j <= n ; j++ ) {
if( a[j] == i)
dp[i][j] = max ( dp[i][j], max(dp[i][j-1], dp[i-1][j-1] + 1 ) ) ;
else
dp[i][j] = max ( dp[i][j], dp[i][j-1] ) ;
ans = max ( ans, dp[i][j] ) ;
}
cout << ans ;
return 0 ;
}