- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2008年noip;1、 笨小猴(word)
题意简述:给出一个单词,统计其中出现最多的字母出现的次数maxn,以及出现最少的字母的次数minn,如果maxn-minn是质数的话则作为一个Lucky Word..否则即为No Answer.;第二题 matches
题意简述: 给你n(n=24)根火柴棒,叫你拼出 A + B = C这样的等式,求方案数.;第三题 message
题意简述: 给一个矩阵(左上角和右下角固定为0),从左上角走两次到右下角,两次走的路径不能有交集(即一个点不能被走两次),求两次走过的格子上的数的和最大是多少.(类似二取方格数.);;【题目类型】双线程动态规划
【建议编程时间】40分钟。这里的编程时间包括调试时间。
【空间复杂度】约27M,全局变量完全可承受。50*50*50*50*sizeof(int)=2.5*10^7.
【解题分析】
1、? 读入矩阵,注意行列。
2、? 采用一个四维数组记录当前两条路走到的位置(i1,j1,i2,j2)时取得的最大值,初始化为0,表示不可能到达。(0,0,0,0)为1,最后减1输出。
3、? 一个四重循环枚举两条路分别走到的位置。由于每个点均从上或左继承而来,故内部有四个if,分别表示两个点从上上、上左、左上、左左继承来时,加上当前两个点所取得的最大值。例如,f[i][j][k][l] = max{f[i][j][k][l], f[i-1][j][k-1][l] + a[i][j] + a[k][l]},表示两点均从上面位置走来。
4、? 输出右下角处的最大值f[m][n][m][n],注意换行。
【编程注意】
1、? 在数组边界处特殊处理,避免数组越界。
2、? 若待继承的点最大值为零,则停止判断,不能从这里走来。
3、? 显然,非矩阵右下角的汇合点,两个位置不能重合(否则路径相交),若重合则最大值为0,不可达。
?
?;4.双栈排序
【问题描述】
通过两个栈S1,S2,将一个给定的输入序列升序排列。定义a操作将元素压入S1栈,b操作从S1栈中取出栈顶元素,c操作将元素压入S2栈,d操作从S2栈中取出栈顶元素。求字典序最小的操作序列。
【建议编程时间】
贪心算法40分钟(包括调试),可得30分。
【解题分析】(贪心算法,30分)
1、读入序列
2、若能进入S1栈,则执行a操作,进入S1栈;重复执行b操作,将S1栈中当前元素弹出,直到不可行为止。
3、若能进入S2栈(c),并将S2中符合要求的元素弹出(d),直到不可行。
4、若两栈均无法进入,失败退出
5、输出操作序列
【判断是否能进栈】
若当前元素小于栈顶元素,则进栈,栈元素个数自增;否则不能进栈。因为栈中必须保持降序,这样才能保证依次输出时升序。
【判断是否能出栈】
用全局变量表示当前取出的最大元素。若栈内元素个数不为零,且当前栈顶元素等于最大元素+1(因为元素是1-n依次取出的),则取出该元素,最大元素自增,栈元素个数自减。;【正确解题分析】
这道题大概可以归结为如下题意:
有两个队列和两个栈,分别命名为队列1(q1),队列2(q2),栈1(s1)和栈2(s2).最初的时候,q2,s1和s2都为空,而q1中有n个数(n=1000),为1~n的某个排列.
现在支持如下四种操作:
a操作,将 q1的首元素提取出并加入s1的栈顶.
b操作,将s1的栈顶元素弹出并加入q1的队列尾.
c操作,将 q1的首元素提取出并加入s2的栈顶.
d操作,将s2的栈顶元素弹出并加入q1的队列尾.
请判断,是否可以经过一系列操作之后,使得q2中依次存储着1,2,3,…,n.如果可以,求出字典序最小的一个操作序列.
?;这道题的错误做法很多,错误做法却能得满分的也很多,这里就不多说了.直接切入正题,就是即将介绍的这个基于二分图的算法.
注意到并没有说基于二分
图匹配,因为这个算法和二分图匹配无关.这个算法只是用到了给一个图着色成二分图.?
第一步需要解决的问题是,判断是否有解.
?
考虑对于任意两个数q1[i]和q1[j]来说,它们不能压入同一个栈中的充要条件是什么(注意没有必要使它们同时存在于同一个栈中,只是压入了同一个栈).实际上,这个条件p是:存在一个k,使得ijk且q1[k]q1[i]q1[j].;首先证明充分性,即如果满足条件p,那么这两个数一定不能压入同一个栈.这个结论很显然,使用反证法可证.
假设这两个数压入了同一个栈,那么在压入q1[k]的时候栈内情况如下:…q1[i]…q1[j]…
因为q1[k]比q1[i]和q1[j]都小,所以很显然,当q1[k]没有被弹出的时候,另外两个数也都不能被弹出(否则q2中的数字顺序就不是1,2,3,…,n了).
而之后,无论其它的数字在什么时候被弹出,q1[j]总是会在q1[i]之前
您可能关注的文档
- 2008年补充习题例题集锦(可开)课程.ppt
- 2008信息化建设工作计划及进展课程.ppt
- 2008中考物理专题复习-欧姆定律课程.ppt
- 2009-2010第19次课相干光杨氏双缝干涉课程.ppt
- 2009年全国大学生电子设计竞赛培训-哈工大课程.ppt
- 2009年协会工作课程.ppt
- 2010-01-23机械通气常见问题的处理课程.ppt
- 2010MBA供应链管理课程.ppt
- 2010阿迪达斯销售宝典课程.ppt
- EPC工程总承包项目管理课题.ppt
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
文档评论(0)