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

清北noip讲义(枚举、模拟、贪心).ppt

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

贪心 贪心法( Greedy algorithm),又称贪心算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。 贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。 贪心算法与动态规划的不同在于它每对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。 合并果子 有n堆果子,每次可以合并任意两堆,费用为两堆果子数。求最少的费用将所有的果子合并。 repair 建筑抢修 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏。 经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。 现在的情况是:T部落基地里只有一个修理工人。虽然它能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了。 你的任务是帮小刚合理的制定一个修理顺序,以抢修尽可能多的建筑。 输入文件第一行是一个整数N,接下来N行每行两个整数T1, T2描述一个建筑:修理这个建筑需要T1秒,如果在T2秒之内还没有修理完成,这个建筑就报废了。 输出文件只有一行,是一个整数S,表示最多可以抢修S个建筑。 N 150,000; T1 T2 maxlongint 样例输入: 4 100 200 200 1300 1000 1250 2000 3200 样例输出: 3 方法一 我们将建筑按T2排序,从前至后扫描,可修则修,否则放弃。 决策有后效性。 几乎没分。 方法二 在法一的基础上,我们发现,让我们错过最优解的往往是那些修理时间很长的建筑,我们这样修补我们的贪心策略,从前之后扫描,可修则修,否则,如果当前的建筑的修理时间少于前面花费的修理时间的最大值,那么就用当前建筑的修理时间替换最大值。(堆维护) 证明 可行性:法一显然正确,法二中,替换以前决策的必然T2更大,T1更小,以前可行,替换后必然可行。 最优性:任意时刻都保证了对当前来说的数量尽量多时间尽量少 搬桌子 最近Graphic公司决定对他们的办公室进行调整,因此办公室中有很多张桌子要从一个办公室搬到另一个办公室去。办公室由西至东一字排开,办公室的南面是一条窄窄的走廊。桌子只能通过走廊从一个办公室搬到另一个办公室,而且同一段走廊只允许一张桌子通过。 为了描述方便,将办公室从西到东按照自然数列编号。给出桌子数N,和每张桌子的开始办公室和目标办公室。你的任务是判断这些桌子要分成几批才能由起始办公室搬到目标办公室。注意:在搬运过程中只能直接从起始办公室搬到目标办公室,不能有其他办公室做中转站。 在这个例子中,桌子必须分成两批完成搬运:第一批:1 到 4,5到8;第二批:3到6,7到10。 输入文件: 第一行为N(1≤N≤6000), 接下来N行,每一行两个正整数, 描述一个桌子的起始办公室和目标办公室ai,bi(0≤ai,bi≤ 109)。 输出文件: 第一行为最小的批次M。接下来M行,每行为当前批次的描述:哪些桌子将在这一批中完成搬运工作。每行第一个数为这一批搬运的桌子的数目,紧接着为桌子的编号(也就是输入文件中桌子出现的顺序)。 Desk.in Desk.out 4 1 4 5 8 3 6 7 10 2 2 1 2 2 3 4 算法讲解 先用快排排序,再用贪心算法即可。 因为走廊只能通过一张桌子,所以将桌子从A运送到B等价于将桌子由B运送到A,因而我们可先对数据做一个预处理,即读入a,b,若ab,则将a,b互换。然后按照a的顺序升序进行排序,若a相同的,则以b的顺序升序排列。对于排好序后的数列c ans := 1; for i := 2 to n do begin pre := 1; for j := 1 to i - 1 do if inter[j, 2] = inter[i, 1] then inc(pre); if pre ans then ans := pre; end; 列车 现有了这样一个游戏: 一辆有n个门的火车驶进了一座长len的火车站,火车的n个门在火车上的位置分别为di(1≤i≤n,且d1=0,di≤len)。火车站有m个乘客,第i个

文档评论(0)

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

1亿VIP精品文档

相关文档