zipper poj2192 字串上的dp

2021-08-19 06:41:35 字數 949 閱讀 8181

題意:給你三個字串,問你能否由前兩個合成第三個,且要求不改變前兩個字串的順序。題目保證第三個字串的長度為前兩個字串的長度之和。

題解:此題用暴力,深搜都可以過(資料太水)。這裡給出dp的解法。

dp[i][j](bool 型)代表第乙個字串的前i個字元和第二個字串的前j個字元能否合成第三個字串的前i+j個字串。

則狀態轉移方程為:

1

if(dp[i-1][j]&&s1[i]==sum[i+j]||dp[i][j-1]&&s2[j]==sum[i+j])

2 dp[i][j]=true;

對於狀態方程的解釋:

1.若第乙個字串的前i-1個字元和第二個字串前j個字元可以合成第三個字串的前i+j-1個字元,則如果第乙個字串的第i個字元和第三個字元的第i+j個字元相同,那麼第乙個字串的前i個加上第二個字串的前j個字元可以合成第三個字串的前i+j個字元,則dp[i][j]就等於true,否則dp[i][j]=false。

2.若第乙個字串的前i個字元和第二個字串前j-1個字元可以合成第三個字串的前i+j-1個字元,則如果第二個字串的第j個字元和第三個字元的第i+j個字元相同,那麼第乙個字串的前i個加上第二個字串的前j個字元可以合成第三個字串的前i+j個字元,則dp[i][j]就等於true,否則dp[i][j]=false。至於初始化根據狀態轉移方程就很容易寫出來了。

#include#include#includeusing namespace std;

const int maxn=205;

char s1[maxn],s2[maxn],sum[maxn+maxn];

bool dp[maxn][maxn];

bool solve()

int main()

return 0;

}

38 字元中的唯一字元

原題目 給定乙個字串,找到它的第乙個不重複的字元,並返回它的索引。如果不存在,則返回 1。示例 s leetcode 返回 0 s loveleetcode 返回 2 思路 用for迴圈遍歷每乙個元素,然後用find函式從前到後尋找這個元素並返回這個元素所在的位置,用rfind從後到錢尋找這個元素並...

021 字元陣列

021 字元陣列 以字元陣列為基礎做簡單的文版編輯器,該程式出入文字行直至遇到 乙個空行為止,而後每次乙個字元重新顯示各行。出語言精彩程式設計百例 第21 include define max 100 define len 80 void main char text max len registe...

1039 字元消除

字元消除,正好簡單複習一下,c 中的容器。容器使用起來還是比較方便的,包括string型別,還是要經常寫寫,才知道自己那些地方有問題。include stdafx.h include include include using namespace std string stringremove st...