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会快很多.

posted @ 2008-10-31 21:40  4h  阅读(482)  评论(0编辑  收藏  举报