剛開始不理解狀態方程,後來問群上明神說一句數學歸納法的道理,覺得對dp又了解了一點。。。。
狀態方程:dp[i][j]==min(dp[i+1][j]+a[i],dp[i][j-1]+a[j]),
當str[i]==str[j]:dp[i][j]=min(dp[i][j],dp[i+1][j-1])
其中dp[i][j]表示從i~j的最小花費,a[i]表示花費的最小值,因為增加和刪除的操作結果是一樣的,所以取最小的就行了
從區域性最優去推出狀態dp[i][j],因為dp[i][j-1],dp[i+1][j]已知,不過需要從後往前推
雖然還不是很理解,不過慢慢去消化吧~~
#include #include #include using namespace std;
#define n 2001
int n,m;
char s[n];
int dp[n][n];
int a[30];
int main()
for(int i=0;i=0;j--)
}cout<
NYOJ1023 還是回文(區間dp)
分析 這道題是乙個簡單區間的dp,狀態定義為dp i j i 到 j 這個區間形成回文的最小花費,分兩種情況討論 s i s j dp i j dp i 1 j 1 s i s j dp i j min dp i j 1 cost s j a dp i 1 j cost s i a cost tt ...
NYOJ 1023 還是回文 區間dp
時間限制 2000 ms 記憶體限制 65535 kb 難度 3描述 判斷回文串很簡單,把字串變成回文串也不難。現在我們增加點難度,給出一串字元 全部是小寫字母 新增或刪除乙個字元,都會產生一定的花費。那麼,將字串變成回文串的最小花費是多少呢?輸入多組資料 第乙個有兩個數n,m,分別表示字元的種數和...
NYOJ1023 還是回文 區間DP,詳細
題目 還是回文 時間限制 2000 ms 記憶體限制 65535 kb 難度 3 描述 判斷回文串很簡單,把字串變成回文串也不難。現在我們增加點難度,給出一串字元 全部是小寫字母 新增或刪除乙個字元,都會產生一定的花費。那麼,將字串變成回文串的最小花費是多少呢?輸入 多組資料 第乙個有兩個數n,m,...