以案例給出的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 的定義就是以...