1. 程式人生 > 其它 >Bear and Compressing(數位dp)

Bear and Compressing(數位dp)

技術標籤:dp動態規劃

題目連結: Bear and Compressing


大致題意:

給出q組資料,每組資料有一個長度為2的字串ai和一個字元bi,表示字串ai可以轉化成bi,現在限定一段長度為n的字串,當它最前的兩個字元和ai可以匹配,則可以轉換為bi,轉換次數不限。

現在問有多少段這樣的字串最終可以轉化成’a’。


解題思路:

數位dp

f[i][j][flag]表示處理到第i位,前一位是j,flag表示是否合法


AC程式碼:

#include <bits/stdc++.h>
using namespace std;
int n, m;
string a[40], b[
40]; int f[10][10][2]; int dfs(int pos, int pre, int flag) { if (!pos)return flag; if (f[pos][pre][flag] != -1)return f[pos][pre][flag]; int res = 0; for (int i = 0; i < m; ++i) { res += dfs(pos - 1, a[i][0] - 'a', flag && (b[i][0] - 'a' == pre)); } f[pos][pre][flag] = res; return res;
} int main() { cin >> n >> m; for (int i = 0; i < m; ++i)cin >> a[i] >> b[i]; memset(f, -1, sizeof f); cout << dfs(n - 1, 0, 1) << endl; return 0; }

END