0%

区间DP

区间动态规划(Interval Dynamic Programming,简称区间DP)是一种动态规划算法,用于解决涉及区间的问题。以下是一个区间DP的Java代码示例,用于解决最长回文子序列问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class IntervalDP {

public static int longestPalindromicSubsequence(String s) {
int n = s.length();
int[][] dp = new int[n][n];

for (int i = 0; i < n; i++) {
dp[i][i] = 1; // 单个字符是回文序列
}

for (int len = 2; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = i + len - 1;

if (s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i + 1][j - 1] + 2;
} else {
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
}
}
}

return dp[0][n - 1];
}

public static void main(String[] args) {
String s = "bbbab";
int longestPalindromeLen = longestPalindromicSubsequence(s);
System.out.println("Longest Palindromic Subsequence Length: " + longestPalindromeLen);
}
}

在这个示例中,longestPalindromicSubsequence 方法使用区间动态规划解决了最长回文子序列问题。通过构建一个二维数组 dp[i][j] 来保存字符串区间 s[i..j] 的最长回文子序列长度。通过填表过程,我们可以找到最长回文子序列的长度。

这个示例是一个区间动态规划的实现,实际应用中可能需要根据不同的问题进行适当的修改。