DP 重疊子問題 POJ 3280

2021-06-14 03:05:04 字數 1071 閱讀 1731

以案例給出的abcb為例

假定字串abcb的子串ab,形成回文字串有四種構造方法

1.刪除開頭的a   ab=>b

2.刪除結尾的b   ab=>a

3.在結尾增加a   ab=>aba

4.在開頭增加b   ab=>bab

經過以上四種構造方法,便已然講ab構成回文串的費用記錄於陣列中由以上類推,此dp的重疊子問題是:

其實對於此題而言,我們只是操作開頭和末尾兩個字元

由此推來:子串ax...xb                          //x..xb是回文串 ax..x是回文串

dp[i][j]=min,dp[i][j-1]+min}  //ij是指字串中子串從i位到j位

#include #include #include #include #include #include #include #include #include #include using namespace std;

#define mp make_pair

#define pb push_back

#define lson l, m, rt<<1

#define rson m+1, r, rt<<1|1

typedef pairpii;

typedef long long ll;

typedef __int64 ll1;

const double pi = 3.141592653;

const int mod = 1e9 + 7;

const int maxn = 2e3 + 25;

const double eps = 1e-7;

char s[maxn];

int le[26][2];

int dp[maxn][maxn];

int main()

for( i=m-1; i>=0; i-- ){

for( j=i; j

POJ 3280 簡單區間 DP

就是想的時候不要想漏了轉移方式。對於乙個回文串 去掉最左和最右兩個後依然是回文串,好了。dp 轉移有三種,一種是從 dp i 1 j 轉移過來,一種是從 dp i j 1 轉移過來,一種是從 dp i 1 j 1 轉移過來 include include include include includ...

重疊子問題

做了幾道題讓我想起乙個問題,就是重疊子問題這個思想。記得動態規劃優化問題的兩個要素就是,最優子結構和重疊子問題。關於重疊子問題的優化,就是這些子問題可能多次用到,多次計算,所以可以事先計算了,然後用到的時候查表。比如之前的codejam的b題,裡面就有重疊子問題,小資料的時候,一般都可以寫出,而大資...

DP之序列 子串問題

dp之序列 字串問題是非常常見的一種問題,它包括下面這些題型 最大連續子串行和 最長不下降子串行 lis 最大公共子串行 最長回文子串 這類問題的最大特點就是它的dp陣列的索引i是依據序列或字串的下標的。即根據序列seq i 或者字串s i 來定義dp i 的含義,例如lis的dp i 的定義就是以...