引例:
给出一个字符串
给出一个包含n个单词的字典
要求把单词划分成尽量少的子段,使得每 个小段都是字典中的一个单词
字符串 = ABABACABA
字典 = {A,AB,BA,CA,BBC}
字符串划分: AB|A|BA|CA|BA
对于该例,可以得出状态转移方程:
inf (无符合字典中的串)
dp[i]= (0<k<l) (l表示字典中最长单词的长度)
min{dp[i-k]}+1 (K的值符合:dp[i-k]到dp[i]组成字典中的一个单词)
总结模型特点:
将一个线性实例划分成若干份,每份满足 若干条件,要求目标函数最优
状态:F[i]为前i个元素划分完毕后最优函数
转移决策:关注前i个元素划分的最后一个 小段[ j .. i],那么问题归为子问题F[j – 1]
复杂度分析: 状态数 * 决策数 * 转移时间
练习:
1. 安排车厢:
热身,转移时运用部分和
2. Longest Prefix:
决策+转移:枚举j,查找[j..i]在单词内 ---> 直接枚举单词
3. 书架:
max (h[j].. h[i]),倒序扫描决策j达到O(1)转移
4. Formatting Text:
转移式,感性认识:平均分配
理性思考,证明长度仅有两种,进一步推导,得出转移式
锻炼思维的分析能力
打印答案