HDU1501 Zipper(DFS 記憶化搜尋)

2021-07-26 08:21:51 字數 689 閱讀 8758

題意:給三個字串,保證第三個串長度是前兩個串長度之和,確定前兩個串保持原有的字母順序能不能拼成第三個串。

思路:直接搜尋的話會有大量重複的運算,要用記憶化陣列記錄之前的結果。當匹配到第乙個串的第i位和第二個串的第j位時,前面可能有多種情況,但三個串後面的長度一定,所以結果也可以確定,用vis[i][j]記錄當前狀態是否匹配過。

//#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

typedef long long ll;

char s1[205],s2[205],s3[405];

int vis[205][205],f;

void dfs(int i,int j)

vis[i][j]=1;//記錄當前狀態

if(s3[i+j]!=s1[i]&&s3[i+j]!=s2[j])

if(s3[i+j]==s1[i]&&!vis[i+1][j])

if(s3[i+j]==s2[j]&&!vis[i][j+1])

}int main()

}

Hdu 1501(記憶化搜尋,dp)

hdu 1501 思路 1 記憶化搜尋 找字串是否匹配,只需要找到字串的對應順序一致即可。資料不大,所以可以開乙個二維陣列記錄s1,s2連個字串中字元出現的位置,然後與結果串進行匹配。include include includeusing namespace std const int maxn ...

HDU 1072 記憶化搜 DFS BFS

題目大意 0為牆1為路2為起點3為終點4為炸彈 走到任意乙個炸彈都可以將所有炸彈重置倒計時6minutes 每走乙個位置需要1minutes 問從2到3需要的最少時間 dfs法更快。bfs法好理解。思路 兩種方法都需理解一點 同乙個炸彈位置當第二次走到時說明已不是最優解。bfs法 處理走到同乙個炸彈...

Hdu 1428(記憶化搜素 最短路)

hdu 1428 思路 求出圖的逆向最短路,即每個點到 n,n 的最短路,然後求出 1,1 到 n,n 的最短路的數量,num i j 記錄點 1,1 到 i,j 過程中的最短路的條數,然後遇到之前求過最短路的點就直接返回,否則求解後再返回。參考文章 include include include ...