POJ 3382 Deciphering, 字符串DP
http://acm.pku.edu.cn/JudgeOnline/problem?id=3382
N个子串, M个连接规则,K种类型
每个子串可以属于若干种类型,
每个连接规则由若干种类型组成
给一个母串,问按照这M个连接规则,用这N个子串构成这个母串的方案数有多少种.
N<=5000,M<=10,K<=10,子串长度<=20,母串长度<=1000
状态表示: f[i][k][j],表示匹配到第i个字符,第k个规则中第j个类型的方案数.
状态转移: 扫描substr = str.substr(i - len + 1, len)(len <= 20),判断substr是否在字典中存在,
若在字典中,它所属于的类型type, 判断f[i-len][k][j-1]是否存在规则k的第j个类型是type,
若存在, f[i][k][j] += f[i-len][k][j-1]
此题还要输出某个解,需要保存父结点,然后通过递归输出某个解.
复杂度是O(1000*10*10*20)
查找substr是否在字典中,用hash会快很多.