优先搜索应用要点.ppt

  1. 1、本文档共111页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优先搜索应用要点

虫食算(NOIP2004-4) 【问题描述】 ????所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: ?????? 43#9865#045 ????+????8468#6633 ?????? 44445506978 ????其中#号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是5。 现在,我们对问题做两个限制: ????首先,我们只考虑加法的虫食算。这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0。 ????其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是N进制的,我们就取英文字母表午的前N个大写字母来表示这个算式中的0到N-1这N个不同的数字:但是这N个字母并不一定顺序地代表0到N-1)。输入数据保证N个字母分别至少出现一次。 ???? ?BADC ??????+????CRDA ????????????DCCC ????上面的算式是一个4进制的算式。很显然,我们只要让ABCD分别代表0123,便可以让这个式子成立了。你的任务是,对于给定的N进制加法算式,求出N个不同的字母分别代表的数字,使得该加法算式成立。输入数据保证有且仅有一组解, 【输入文件】 ????输入文件alpha.in包含4行。第一行有一个正整数N(N=26),后面的3行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。这3个字符串左右两端都没有空格,从高位到低位,并且恰好有N位。 【输出文件】 ????输出文件alpha.out包含一行。在这一行中,应当包含唯一的那组解。解是这样表示的:输出N个数字,分别表示A,B,C……所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。 样例: 【样例输入】 5 ABCED BDACE EBBAA 【样例输出】 1 0 3 4 2 【数据规模】 对于30%的数据,保证有N=10; 对于50%的数据,保证有N=15; 对于全部的数据,保证有N=26。 解决方案1 要求一一对应的关系,就可以枚举这些一一对应的关系,找出符合的一项。这样,关系总数有O(N!)个,最坏情况下必须枚举所有的关系,并且加以判断,复杂度高达O(N*N!)! 解决方案2: 大体上,从算式最后一位开始模拟运算情况,当可递推时递推,不可递推则枚举。 对于一竖列,先处理两个加数,当遇到的字母的值不确定时,则枚举当前位(注意与前面的情况判重);否则不作为处理和,当遇到的字母的值不确定时,可从加数部分确定的值来确定(注意与前面的情况判重和进位);否则看加数部分确定的值是否能得到和部分(注意进位)。引出矛盾就回溯。 如题目的样例: 5 ABCED BDACE EBBAA 它最后一位的情况是(D+E) mod N=A, 对于最后一位只要枚举D,E的情况;A 则可以由D,E的值递推而来。对于倒2位, (E+C+最后一位进位) mod N=A ;E的值可以用前面的结果;枚举C;判断A是否为(D+C+最后一位进位) mod N…… 虽然复杂度还是O(N!),但这种方法限制很多(相当于剪枝)。 解决方案3 观察题目的条件已经限制得很苛刻:N个变量,每个至少出现一次;而且正好一共有N位的算式。这样就构成了解方程的动机。这N个变量的对应N个未知量,有N位的算式对应N个方程;N个未知量,N个方程,正好可以得到唯一解。这里要注意,对解的要求很严格:必须是0至N-1的每个整数都正好出现一次。 但对每位式子的进位关系并不清楚,而进位关系正好影响了方程的常数项。枚举每位是否进位。用时O(2n), (因为首位不可能进位,无须枚举)。然后,用高斯消元法来解方程。可以在枚举之前先解出方程,枚举的时候再把参数带入。带入求解的复杂度是O(n2) 。 解决方案4 在解决方案3的基础上,我们可以对进位的枚举剪枝。观察这个竖列:A+B=C,若无进位则有A=C且B=C; 若有进位则有A=C且B=C. 若能推导出A=B 且B=A (A,B为任何不相等字母),则当前的枚举不可行。可用递归枚举,从后向前枚举,处理一个竖列时则加上2个不等式,看是否矛盾。数据结构用邻接矩阵。(规定A=B,再有向图中有边A,B)。 若加进不等式A=B ,要加入所有x(x=A) =y(B=y),枚举x,y用O(n^2)得时间。再判断是否有x=y 且x=y. 传染病控制 (NOIP2003-4) 染病的传播具有两种很特殊的性质: 第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不得病,或者是XY之间的传播途径被切断,则X就不会得病。第二是,这

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档