-一张一弛,解题之道-

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一张一弛,解题之道

——“约制、放宽”方法在解题中的应用

目录

一张一弛,解题之道 (1)

——“约制、放宽”方法在解题中的应用 (1)

目录 (1)

【摘要】 (3)

【关键字】 (3)

“约制、放宽”方法的定义 (4)

引言 (4)

例题分析 (4)

[例一]骑士 (4)

【问题描述】 (4)

【问题分析】 (5)

【数学模型】 (5)

【算法模型分析】 (5)

【确定总算法和研究对象】 (5)

【分析研究对象】 (6)

【“约制”方法确定新任务】 (6)

【寻找两个向量的规律】 (6)

【“约制”方法解决新任务】 (8)

【回到研究对象】 (10)

【回到起点】 (11)

【小结】 (11)

[例二]友好的动物 (12)

【问题描述】 (12)

【问题分析】 (12)

【数学模型】 (12)

【原始算法的矛盾】 (13)

【数据范围分析】 (13)

【数据结构优化时的矛盾】 (13)

【分析矛盾】 (14)

【“放宽”方法化解矛盾】 (14)

【小结】 (15)

[例三]消防站 (16)

【问题描述】 (16)

【问题分析】 (16)

【数学模型】 (16)

【算法模型分析】 (16)

【预处理】........................................................ 错误!未定义书签。

【确定动态规划时的矛盾】 (17)

【总结分析】 (17)

【“放宽”方法转化限制】 (17)

【进一步分析】 (18)

【“约制”方法增添限制】 (18)

【确定动态规划转移方程】 (19)

【小结】 (20)

总结 (20)

【感谢】................................................................................. 错误!未定义书签。

【摘要】

本文主要阐述了“约制、放宽”方法在解题中的应用。

第一部分解释了什么“约制、放宽”方法。第二部分论述了在解题中为什么需要“约制、放宽”方法。第三部分通过分析《骑士》、《友好的动物》和《消防站》分别介绍了“约制”方法、“放宽”方法和两者综合应用在解题中起的作用。最后作者结合自身经验谈谈在解题中如何灵活运用“约制、放宽”方法。

【关键字】

“约制”方法“放宽”方法

过于宽松过于繁杂

过于独立过于严格

约制条件、限制

放宽条件、限制

正文

“约制、放宽”方法的定义

“约制”方法——添增一些约束的条件、限制,并保证在这些条件和限制下依然能找到解。

“放宽”方法——减除、放宽一些条件、限制,并保证在这些条件和限制下依然能找到解。

引言

在分析问题、设计算法的时候,我们常常会觉得条件、限制过于繁杂、严格或者过于宽松、独立以致无法下手。这时,不妨尝试“约制、放宽”方法。“约制”方法往往在我们迷茫时指出一条光明大道,“放宽”方法则常常在关系错综复杂时破除阻扰和荆棘。巧妙地运用这两种方法能使我们在解题中排除万难,直入脏腑。

例题分析

下面,本人从“约制”方法,“放宽”方法和两者的综合应用三个方面精心挑选了三个题目并作详细分析,希望这能起到抛砖引玉的作用。

[例一]骑士1

【问题描述】

有一骑士在一个无限大的棋盘上移动。它每次的移动都用一个整数对来描述——整数对(a,b)表示骑士能从位置(x,y)跳到位置(x+a,y+b)或者(x-a,y-b)。每个骑士有一系列的已确定的整数对,描述这骑士能进行哪些移动。我们保证每个骑士能到达的位置不在同一直线上。

当两个骑士以位置(0,0)为始点能到达的所有位置完全相同时(可能做很多次移动),我们就说这两个骑士是等价的。可以证明对于每一个骑士,都存在一个只有两个整数对的等价骑士。

任务:读入一个骑士的所有整数对,找出一个只有两个整数对的等价骑士。1选自POI2005的STAGE 1的《KNIGHTS》

【问题分析】

【数学模型】

令输入的整数对分别表示为向量),(11b a ,向量),(22b a ……向量),(n n b a ,找出两个整数对——向量),(11d c 和),(22d c 与这n 个向量等价,也就是

对于任意的整数序列n t t t t ......,,321,都存在两个整数f

e ,使得 ),(),(),(2

2

111d c f d c e b a t n i i i i ⨯+⨯=⨯∑= 并且对于任意两个整数f e ,,都存在一个整数序列n t t t t ......,,321,使得

∑=⨯=⨯+⨯n

i i i i b a t d c f d c e 1

2211),(),(),(

【算法模型分析】

看到这个题目,最容易想到的算法是枚举这两个向量和用宽度优先搜索判断是否等价。但是要寻找的这两个向量的范围是无限大的,并且棋盘也是无限大的。因此这个算法宛如大海捞针一般,极难在有限的时间内找到解。

然后尝试贪心、动态规划、图论等硬做的算法,但这些算法都在预料之中以失败告终。

最后,看来只有必经之路——数学方法才能可以解决这个问题。

【确定总算法和研究对象】

用数学方法解决等价转化等题目的方法还是不胜枚举的。例如有归纳法,有总体法,有解方程法,有数形结合。对于这个题目,我们应选取什么数学方法好呢?

注意到,如果任意的三个向量都可以与某两个向量等价,那么便可以从n(n>2)个向量中任选三个向量出来,用与它们等价的两个向量代替它们,从而变成n-1个向量。不断重复上述的过程,直到只剩下两个向量为止,这时剩下的两个向量便是一个可行解。而由问题描述可以知道:对于任意三个向量都存在两个向量与它们等价。这便意味这种方法是可行的。

于是,就可以确定下总算法——不断化三为二,同时也产生了我们的研究对象——如何把三个向量等价替换为两个向量?

相关文档
最新文档