网站大量收购独家精品文档,联系QQ:2885784924

国家集训队2005-论文集 唐文斌.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
国家集训队2005-论文集 唐文斌

正难则反–浅谈逆向思维在解题中的应用 绍兴市第一中学 唐文斌 【摘要】逆向思维是一种思考问题的方式,它有悖于通常人们的习惯,而正是这一特点,使得许多靠正常思维不能或是难于解决的问题迎刃而解。本文通过几个例子,总结了逆向思维在信息学解题中的应用。 【关键字】 逆向思维 容斥原理 参数搜索 二分 动态规划 记忆化 【正文】 引言 我们先看一个简单的问题: 平面上有四个点,构成一个边长为1的正方形。现在进行一种操作,每次可以选择两个点A和B,把A关于B对称到C,然后把A去掉。 求证:不可能经过有限次操作得到一个边长大于1的正方形 操作后的结果是相当复杂的,如果我们从正面着手,很难证明命题。不妨从反面来看问题:观察可以发现,每一步操作都是可逆的。即,我们如果可以把正方形变大,也可以把正方形变小。 证明: 不妨设四个顶点都是整点。 假设我们可以通过有限次操作得到一个边长大于1的正方形,那么我们把所有操作反过来对原正方形进行操作,我们可以得到一个边长小于1的正方形。 因为四个顶点都是整点,操作之后,点的坐标依然是整数。所以我们得到一个边长小于1且四个点都是整点的正方形。这显然不可能。 所以假设不成立。命题得证。 上面的例子说明了逆向思维在数学问题中的应用。山重水复疑无路,应用逆向思维,换个角度看问题,便柳暗花明又一村了。 例一、Dinner Is Ready 题目大意: 妈妈烧了M根骨头分给n个孩子们,第i个孩子有两个参数Mini和Maxi,分别表示这个孩子至少要得到Mini根骨头,至多得到Maxi根骨头。 输入: 第一行包含两个数n(0n≤8) , M(0M),表示孩子数量和骨头的数量。 接下来n行分别输入Mini和Maxi (0≤Mini≤Maxi≤M) 输出: 输出一个整数,表示妈妈有多少种分配方案(骨头不能浪费,必须都分给孩子们) 初步分析: 该题模型很简单,即求如下方程组的整数解的个数: 我们知道,方程组简单形式的整数解个数为 设Yi = Xi + Mini ,则原方程组转化为 对于下界限制,我可以通过换元得到简单形式,但是因为有上界的限制,我们似乎还无法直接计算出答案。 应用逆向思维: 设S为全集,表示满足Xi≥Mini的整数解集。 设为S中满足约束条件Xi≤Maxi的整数解的集合,为在S中的补集,即满足XiMaxi。 无法计算,但是,可解!!!我们希望把的计算转化到可解的。 于是: 这是一种容斥原理的形式。至此,问题已经解决。我们应用逆向思维,在原集合的模不可解的情况下,通过可解的得到答案。并给出了一个基于容斥原理的算法。时间复杂度为O(2n * (n+M))。 例二、Greedy Path 题目大意: 有n个城市,被m条路连接着。最近成立了一些旅行社,在这些城市之间给旅行者们提供服务。旅行者从城市i到城市j需要付给旅行社的费用是Ci,j,需要的时间为Ti,j 。很多旅行者希望加入旅行社,但是旅行社只有一辆车。于是旅行社的老板决定组织一次旅行大赚一笔。公司里的专家需要提供一条使得贪心函数F(G)最大的回路G。F(G) 等于总花费除以总时间。但是没有人找到这样的回路,于是公司的领导请你帮忙。 输入: 第一行包含两个数n(3≤n≤50),m 分别表示点数和边数。 接下来m行每行包含一条路的描述。输入四个数,A,B,CA,B,TA,B(0≤CA,B≤100,0≤TA,B≤100) 输出: 如果不存在这样的路,输出0。 否则输出回路中包含的城市个数,然后依次输出通过的城市的顺序。如果有很多条这样的路,输出任意一条。 初步分析: 题目要求是求一条回路,但不是边权和最大或者最小,所以我们不能直接使用经典算法。 设G = (V , E),S为G中所有回路C = (V’ , E’)组成的集合。 我们的目标是找到集合S中的一条回路使得F(C)取到最大值: 应用逆向思维: 如果我们知道C* = (V*,E*)S是一条最优回路,那么 于是我们定义函数 o(t) : o(t) = 我们做一个猜想:如果有o (t*)=0,那么存在C* = (V*,E*)S 满足 我们认为C*就是一条最优回路。 证明:假设存在另一条回路C1= (V1,E1)S更优,则: 但是这与o(t*) = 0矛盾。所以C*是一条最优回路。 如果t*是最优答案,则存在: (性质一) 于是我们就得到了算法: 我们从一个包含t*的区间(tl , th)开始。(例如tl = , th = ) 每一次,选取tl 与 th的中点t , 计算O(t)。 O(t)的计算方法: 对于边eE , 设一个新的参数We = Ce – t * Te 用Floyd算法计算有向图的

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档