涉及子序列的动态规划问题通常可以通过这样的方式计算
使用一维dp:
int n = arr.length;
int[] dp = new int[n];
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
dp[i] = 最值(dp[i],dp[j]...);
}
}
使用二维dp:
int n = arr.length;
int[][] dp = new int[n][n];
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(arr[i]==arr[j]){
dp[i][j] = dp[i][j] + ...
}
else{
dp[i][j] = 最值(....)
}
}
}