區間型動態規劃

2022-05-26 18:24:11 字數 2060 閱讀 3522

給定乙個序列/ 字串,進行一些操作

最後一步將序列/字串去頭/去尾

剩下的會是乙個區間[i,j]

狀態自然定義為f[i][j], 表示面對子串行[i…j] 時的最優性質

667. 最長的回文序列

中文english

給一字串 s, 找出在 s 中的最長回文子串行的長度. 你可以假設 s 的最大長度為 1000.

example

樣例1

輸入: "bbbab"

輸出: 4

解釋:乙個可能的最長回文序列為 "bbbb"

樣例2

輸入: "bbbbb"

輸出: 5

public class solution {

* @param s: the maximum length of s is 1000

* @return: the longest palindromic subsequence's length

public int longestpalindromesubseq(string s) {

// write your code here

char ch = s.tochararray();

if(ch.length==0) {

return 0;

intdp = new int[ch.length][ch.length];

int i,j;

for(i=0;idp[i][i] = 1;

for(i=0;idp[i][i+1] = ( (ch[i]==ch[i+1])? 2:1);

int len;

for(len=3;len<=ch.length;++len) {

//0----len n-len ----len

for(i=0;i<=ch.length-len;++i) {

j = i+len-1;

dp[i][j] = math.max(dp[i][j-1],dp[i+1][j]);

if(ch[i]==ch[j]) {

dp[i][j] = math.max(dp[i][j],dp[i+1][j-1]+2);

return dp[0][ch.length-1];

使用記憶化搜尋

public class solution {

* @param s: the maximum length of s is 1000

* @return: the longest palindromic subsequence's length

public int longestpalindromesubseq(string s) {

// write your code here

ch = s.tochararray();

int n = ch.length;

if(n<=1) return n;

dp = new int[n][n];

int i,j;

for(i=0;ifor(j=i;jdp[i][j] = -1;

dfs(0,n-1);

return dp[0][n-1];

charch = null;

intdp = null;

public void dfs(int i,int j) {

if(dp[i][j] != -1) return;

if(i==j) {

dp[i][j] = 1;

return;

if(i+1==j) {

dp[i][j] = (ch[i]==ch[j]) ? 2:1;

return;

dfs(i,j-1);

dfs(i+1,j);

dfs(i+1,j-1);

dp[i][j] = math.max(dp[i][j-1],dp[i+1][j]);

if(ch[i]==ch[j]) {

dp[i][j] = math.max(dp[i][j],dp[i+1][j-1]+2);

動態規劃 區間型

概述 最長的回文序列 取數是否必勝 給定乙個序列 字串,進行一些操作,最後一步會將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i,j 時的最優性質 1.題目描述 1.給定乙個字串s,長度是n,找到它最長的回文子串行的長度 例子 輸入 bbbab 輸出 ...

區間型動態規劃總結

區間型動態規劃,都是dp i j 由小的區間先計算,然後計算大的區間得到,模板就是 for int len 2 len n len int n s.length int dp new int n n int maxlen 0 for int i 0 i n i char ss s.tochararr...

刪數 dp區間型動態規劃

有n個不同的正整數數x1,x2,xn 排成一排,我們可以從左邊或右邊去掉連續的i個數 只能從兩邊刪除數 1 i n,剩下n i個數,再把剩下的數按以上操作處理,直到所有的數都被刪除為止。每次操作都有乙個操作價值,比如現在要刪除從i位置到k位置上的所有的數。操作價值為 xi xk k i 1 如果只去...