摘要: 问题给定你一个字符串,和n个单词构成的字典。让你求出在字符串中最小删去几个字母,使得剩下的字符串能够由字典中的若干个单词构成。输出最少删去的字母的个数。分析如果考虑第i位的字母,当然只有要和不要两种状态,这是本题的突破口,是划分状态的根本。f[i]表示到第i位最少需要删除的字母的数目。那么得到如下的方程:f[i]:=min{f[i-1]+1,make(i)}不要当前的字母自然不需要解释,直接由相邻的状态更新,无后效性。如果要保留第i位,就需要函数解决。因为第i位的保留就必须有单词能够保留住它,也就会影响和它相邻的状态。当然不能简单地推。至于make函数,如果要保留s[i],必有单词的最后一位恰 阅读全文
posted @ 2011-05-27 17:42 liukee 阅读(563) 评论(1) 推荐(3) 编辑
摘要: 问题有一列士兵排队,给出其身高a[i],现在要让队列中的一些士兵出列,使得剩下的每个士兵都能够看到对头或队尾(在该士兵和他看到的队尾之间没有比该士兵高的士兵)。现在要求最少的出对的士兵数。分析乍一看很像最长xx序列,但是又没有思路,需要抽象题目中的模型。假设a[i]是满足要求的队列中的元素,那么假设a[1]是左边的对首,a[1]~a[i]中的元素都比a[i]小,也就是说a[1]~a[i]的元素都可以满足要求。那么在a[i]的右边的元素只可能比a[i]大或者小,如果比a[i]小,那么从该元素一直到队尾一定是递减的,才能满足题目要求。这样一来,问题就转化成:在队列a[i]中找到一个元素,使得a[1 阅读全文
posted @ 2011-05-27 17:23 liukee 阅读(425) 评论(0) 推荐(0) 编辑