USACO总结
- 格式:pdf
- 大小:180.68 KB
- 文档页数:10
usaco 试题USACO试题USACO是美国计算机奥林匹克竞赛的缩写,它是美国学生在计算机科学领域的竞赛之一。
USACO试题涵盖了各种计算机算法和编程知识,并通过解题的方式来测试学生的能力。
本文将介绍USACO试题的背景、难度和一些解题技巧。
一、背景USACO试题由美国计算机奥林匹克竞赛委员会出题,并面向全球学生开放。
该竞赛旨在提高学生在计算机科学领域的技能,并培养他们的创造力和解决问题的能力。
USACO试题通常包括一系列编程问题,要求学生使用特定的编程语言来解决。
学生需要根据问题描述,并编写程序来产生正确的输出结果。
二、难度USACO试题的难度分为四个级别,分别是铜牌(Bronze),银牌(Silver),金牌(Gold)和白金牌(Platinum)。
每个级别的试题都有一定的难度,需要学生具备不同程度的编程和算法能力。
铜牌级别的试题相对较简单,通常涵盖了基本的算法和编程知识。
而白金牌级别的试题则非常复杂,需要学生具备深入的算法和数据结构知识,以及灵活运用编程语言的能力。
三、解题技巧解决USACO试题需要一定的技巧和方法。
以下是一些常用的解题技巧:1. 理解问题:首先,要仔细阅读问题描述,理解问题的要求和限制条件。
只有充分理解问题,才能更好地进行解题分析和编程设计。
2. 分析问题:其次,要对问题进行分析,找出问题的关键点和难点。
可以利用画图、列举样例等方式,深入剖析问题的本质,为后续的解题提供思路和方向。
3. 设计算法:在分析问题的基础上,需要设计合适的算法来解决问题。
根据问题的特点,选择合适的算法策略,如贪心算法、动态规划、搜索等。
同时,要考虑算法的时间复杂度和空间复杂度,尽量保证程序的效率。
4. 编写代码:根据设计的算法,编写相应的代码实现。
要注意代码的规范性和风格,使其易读易懂。
同时,遵循编程语言的语法和规范,确保程序的正确性。
5. 测试和调试:完成代码编写后,需要进行测试和调试,确保程序可以正确地运行。
在USACO比赛中,数论相关题目一直是考察的热点之一。
数论作为数学的一个重要分支,涉及整数的性质和关系,常常能够运用到算法设计和问题求解中。
本文将从简单到复杂,由浅入深地探讨USACO比赛中的数论相关题目,帮助你更深入地理解这一主题。
1. 简单级别:在USACO比赛的入门级题目中,通常会涉及一些基本的数论知识,比如素数、最大公约数、最小公倍数等。
给定两个整数,要求求它们的最大公约数或最小公倍数;或者判断一个数是否为素数等。
这些题目往往需要运用到基本的数论算法,比如欧几里得算法求最大公约数、筛法求素数等。
2. 中等级别:在中等级别的USACO比赛题目中,数论相关的内容会更加复杂和深刻。
可能涉及到模运算、同余方程、欧拉函数、费马小定理等知识点。
题目可能会要求实现一些高级的数论算法,比如快速幂算法、扩展欧几里得算法等。
这些题目往往需要更深入的数论知识和算法功底,能够更好地理解和运用复杂的数论知识。
3. 高级级别:在USACO比赛的高级题目中,数论相关的内容往往会与其他算法知识结合,考察的角度也更加灵活多样。
题目可能会涉及到数论与图论、动态规划、贪心算法等内容的结合,难度较大。
此时,除了对数论知识的深刻理解外,还需要具备较强的问题建模能力和算法设计能力。
总结回顾:通过以上的分析,我们可以看到,USACO比赛中的数论相关题目,涵盖了不同难度级别的内容,从简单的基本算法到复杂的高级问题解决方案,都需要对数论知识有较为全面、深刻的理解。
在备战USACO比赛时,我们要加强对数论知识的学习和掌握,尤其要注重基础知识的打牢和算法能力的提升。
个人观点和理解:我个人认为,数论是一门非常有趣和有挑战性的数学分支,在USACO 比赛中能够有机会运用数论知识解决实际问题,对于提高自己的数学建模能力和算法设计能力都是非常有益的。
我会在备战USACO比赛的过程中,加强对数论相关知识的学习和实践,努力提高自己的数论解题能力。
通过以上分析和讨论,我们对USACO比赛中的数论相关题目有了更全面、深刻的理解。
usaco竞赛铜升银知识点(原创版)目录ACO 竞赛简介ACO 竞赛的含金量3.铜级和银级竞赛的内容和要求4.铜升银需要的知识点和技能ACO 竞赛对大学申请的帮助正文一、USACO 竞赛简介USACO,即美国计算机奥林匹克竞赛,是一项针对全世界所有的高中信息学竞赛选手的一项竞赛。
作为五大奥林匹克竞赛之一,其能力是被全球认可的。
这个比赛开设目的是为了每年夏季举办的国际信息学竞赛(IOI),选拔美国队队员(4 名)。
二、USACO 竞赛的含金量USACO 的含金量非常高,对于学生申请大学有很大的帮助。
参赛选手可以通过这个比赛展示自己在计算机编程和解决问题方面的能力,这种能力在全球范围内都得到认可。
此外,如果在这个比赛中取得好的成绩,还可以为申请藤校等名校加分。
三、铜级和银级竞赛的内容和要求USACO 竞赛分为铜级、银级、金级和白金级四个级别。
铜级主要是针对初学者,要求掌握基本的算法,如深度优先搜索、广度优先搜索、贪心算法、全排列、递归等。
银级则要求选手能够解决更复杂的问题,需要掌握排序、二分查找、递归搜索、图的遍历、前缀和等知识点。
四、铜升银需要的知识点和技能要从铜级晋升到银级,选手需要具备以下知识点和技能:1.熟练掌握铜级要求的算法和知识点;2.学习和掌握银级要求的算法,如排序、二分查找、递归搜索、图的遍历、前缀和等;3.提高编程和调试代码的能力,能够编写 50~100 行的代码,甚至可能超过 100 行;4.提高建模能力,能够根据题目要求抽象出解决问题的模型。
五、USACO 竞赛对大学申请的帮助参加 USACO 竞赛对大学申请有很大帮助,可以展示自己在计算机领域的才能。
此外,如果在比赛中取得优异成绩,还可以为申请名校加分,提高录取几率。
fleury算法:aco上提供的算法:# circuit is a global arrayfind_euler_circuitcircuitpos = 0find_circuit(node 1)# nextnode and visited is a local array# the path will be found in reverse orderfind_circuit(node i)if node i has no neighbors thencircuit(circuitpos) = node icircuitpos = circuitpos + 1elsewhile (node i has neighbors)pick a random neighbor node j of node idelete_edges (node j, node i)find_circuit (node j)circuit(circuitpos) = node icircuitpos = circuitpos + 1总结: 这种算法的时间复杂度是o(e)的,空间复杂度也是o(e)的,这种算法的特点是最后倒序输出,这个地方需要特别重视一下,在图有欧拉通路或者有欧拉回路的时候,我们总可以从一个合适的点出发,找到一条欧拉路.可以做一下usaco的3.1的题目.2.fleury算法:(1).任取v0属于v(G),令P0=v0;(2) 设Pi=v0e1v1e2…eivi已经行遍,按下面方法来从E(G)-{e1,e2,…..ei}中任取ei+1 ;(a) : ei+1与vi相关联:(b): 除非无别的边可供行遍,否则ei+1不应该为Gi=G-{e1,e2,….ei}中的桥.(3): 当(2)不能再进行时,算法停止.可以证明,当算法停止时所得的简单回路Pm=v0e1v1e2….emvm(vm=vo)为G中的一条欧莱回路.总结:这种算法的复杂度是o(e*e),相队于前面那种算法在时间上没有什么优势,但是由于他是顺序找的,所以用这个来求解题目有时候会收到奇效,比如说题目要求欧拉回路字典序最小,先前的哪一种算法扎这个时候可能无能为力,但是用这个算法仍旧能够漂亮的解决这个问题大家可以参考一下pku的2337,一道很好的用fleury算法求解的题目。
美国COSO内控框架(2013)的主要变化第一篇:美国COSO内控框架(2013)的主要变化2011年12月,美国科索委员会(COSO)发布了新版内控框架的征求意见稿,面向全球公开征求意见。
2013年5月,COSO正式发布新内控框架。
美国COSO内控框架都有哪些新变化呢?新COSO内控框架在内部控制的定义、内部控制五要素、评估内控体系有效性的标准等方面与旧框架保持了一致。
与旧框架相比:细化了内控框架的结构内容。
新框架最显著的变化是在旧框架的基础上,提炼出内部控制五要素的17项总体原则。
五项基本要素和17项总体原则组合起来就构成了内部控制的标准,适用于所有的组织。
扩大了报告目标的范畴。
新内控框架在报告对象和报告内容两个维度上对报告目标进行了扩展。
在报告对象上,既要面向外部投资者、债权人和监管部门,确保报告符合有关监管要求;又要面向董事会和经理层,满足企业经营管理决策的需要。
在报告内容上,除了包括传统的财务报告,还涵盖了市场调查报告、资产使用报告、人力资源分析报告、内控评价报告、可持续发展报告等非财务报告。
强调管理层判断的使用。
新COSO框架对五要素的分解不是按照子要素来进行的,而是作为“原则”来呈现的,即强调“基于原则”的内控实施和管理层判断的使用。
新框架并未要求对17项原则及其关注点进行单独评估以确定其是否存在或有效。
管理层可以自由判断新框架所提供关注点的合适度或相关度,然后根据企业的具体情况,来选择和考虑与某一特定原则密切相关的关注点。
强化公司治理的理念。
新框架包括了更多公司治理中有关董事会及其下属专门委员会的内容,强调董事会的监督对内部控制有效性的重要作用。
这与我国《企业内部控制基本规范》及《组织架构》应用指引中有关公司治理的规定相一致。
增加了反舞弊与反腐败的内容。
与旧框架相比,新框架包含了更多关于舞弊与欺诈的内容,并且把管理层评估舞弊风险作为内部控制的17项总体原则之一,重点加以阐述。
这与我国内部控制规范体系在反腐败工作中的重要作用不谋而合。
0905Costco验厂工作总结Costco验厂工作总结201*年5月11日,STR审核员罗小姐来我公司验厂,时间为一天。
一、审核内容1、2、现场查看、员工访谈。
查阅资料。
总的评价和去年10月份比资料较为充分,改进很多。
二、存在的问题1、提出并要求立即整改或需注意的问题①劳动合同,要把具体工作地点写入合同中。
②花名册,要包括劳动合同起止日期、现住址、联系方式等内容。
③社保证明上要写明参保人数。
有效期为1年。
④访谈中员工说有全勤奖,而并未在工资表中体现。
(解释发放计入绩效考核中)⑤喷塑车间的连班打卡情况需改进。
⑥食堂人员的健康证快要到期了,要及时换证。
⑦化学品最好分类存放在不同的二次容器中2、写入考核结果中的问题1、工资单上员工要签字或提供银行盖章的支付明细也可。
2、员工访谈中关于加班员工的回答和考勤资料显示不一致的比例达30%以上。
①喷塑车间的连班情况和员工打卡不一致。
②员工反馈最近三个月内有加晚班的情况和考勤不一致。
宁波赛奥特户外用品有限公司人事行政部201*-05-扩展阅读Walmart验厂工作总结Walmart验厂工作总结201*年3月3日,Walmart的两名审核员来我公司验厂,时间为半天。
一、审核内容1、审阅资料。
包括工资、考勤、消防、培训、合同、员工档案、安全等,此次的审核重点在工资、考勤、培训、安全等方面,由于时间的问题对工资、考勤的审核虽然用时较少,但发现的问题却不少。
2、进车间检查。
审核人员对生产现场管理很满意。
3、员工访谈。
共抽选25名员工进行访谈,虽员工的回答较为一致,但对公司的某些方面包括对月薪或时薪、最低工资、加班时间等认识不清楚。
二、存在的问题1、建立化学品清单2、消防培训资料要有全体员工的签名即全员参加3、劳动合同约定的是月薪而不失计时工资4、员工手册中未规定晚婚假期的具体时间、晚育假、陪产假、年假5、建立工伤恢复判定程序(如从员工的生理和心理分析判断能否上岗)6、车间化学品品名标示不正确7、法定假日的工资未支付(中秋节、国庆节、元旦等)8、停工待料期间的工资要支付9、加班工资的计算基数低于当地最低工资标准。
usaco题目集usaco题目集是一系列来自美国计算机奥林匹克竞赛(USACO)的编程题目。
USACO是一项面向中学生的计算机竞赛,旨在培养学生的计算机科学和算法设计能力。
该竞赛涵盖了广泛的主题,包括数据结构、图论、动态规划和搜索等。
usaco题目集的难度分为四个级别:铜牌、银牌、金牌和白金。
每个级别的题目都有一定的难度和要求。
通过完成这些题目,学生们可以提高他们的编程技巧和解决问题的能力。
usaco题目集的题目非常有趣和有挑战性。
每个题目都描述了一个具体的问题,学生需要设计和实现一个程序来解决这个问题。
这些问题有时与现实生活中的情境相关,有时与抽象的数学和逻辑问题相关。
例如,一个题目可能要求学生计算某个数列的前n项之和,另一个题目可能要求学生确定给定图形的面积。
解决这些问题需要学生们运用他们所学的算法和数据结构知识,并且具备良好的编程技巧。
usaco题目集的特点之一是其严格的评判标准。
每个题目都有一组测试数据,用于验证学生程序的正确性和效率。
程序需要在规定的时间内给出正确的输出结果,否则将被判定为错误。
这种评判标准旨在培养学生们高效率和准确性的编程能力。
通过解决usaco题目集中的问题,学生们可以提高他们的计算机科学能力,并为将来的学习和工作做好准备。
这些问题不仅可以让学生们巩固他们所学的知识,还可以培养他们的创造力和解决问题的能力。
此外,usaco题目集还提供了一个平台,让学生们可以与全美范围内的同龄人交流和竞争。
每年,usaco组织全美性的比赛,邀请来自各州的优秀选手进行角逐。
这些比赛不仅考察学生的编程能力,还促进了学生们之间的交流和合作。
总之,usaco题目集是一个很好的学习和提高编程能力的资源。
通过解决这些问题,学生们可以提高他们的计算机科学和算法设计能力,并为将来的学习和工作做好准备。
这些问题的多样性和挑战性,使得usaco题目集成为中学生们学习编程的重要工具。
USACO(The USA Computing Olympiad)是美国计算机奥林匹克竞赛,它是一个为美国中学生提供计算机科学培训和竞赛的组织。
USACO 题目是该竞赛的一部分,它要求参赛者解决一系列算法和编程问题,这些问题需要运用数学知识和编程技巧来解决。
USACO 题目的结果是指对每个测试用例给出的程序输出。
因为USACO 题目通常包含多个测试用例,每个测试用例都有一个特定的输入和对应的输出。
解决 USACO 题目时,参赛者需要编写程序来处理输入数据,并将计算结果输出为符合要求的格式。
每个测试用例的结果通常以成绩的形式提交,用于评判解答的正确性和效率。
下面将通过以下几个方面来介绍USACO 题目每个test case 的结果:1. test case 的生成2. 对 test case 的处理3. 结果的验证1. test case 的生成test case 是用来测试程序正确性的一组输入数据和对应的标准输出。
在 USACO 题目中,通常会给出测试用例的范围和要求,参赛者需要编写程序来生成符合要求的测试用例。
通常情况下,参赛者需要考虑各种边界情况和特殊情况,以确保程序在各种情况下都能正确运行。
2. 对 test case 的处理参赛者需要编写程序来对每个测试用例进行处理。
这需要参赛者熟练掌握编程语言的基本语法和数据结构,以便能够高效地处理输入数据并产生正确的输出。
在处理 test case 时,参赛者需要注意错误处理和边界条件,以确保程序的健壮性和正确性。
3. 结果的验证参赛者需要编写程序来验证每个 test case 的结果。
这包括将程序输出与标准输出进行比较,以判断程序的正确性。
在 USACO 题目中,结果的验证通常会包括对程序输出的各种情况进行检查,以确保程序的正确性和稳定性。
处理USACO 题目每个test case 的结果需要参赛者具备扎实的编程基础和分析问题的能力。
通过对每个测试用例的生成、处理和结果验证,参赛者可以提高自己的算法和编程水平,同时也能在竞赛中取得更好的成绩。
我的USACO总结Congratulations!You have finished all available material.Chapter1DONE2008.12.16Getting startedChapter2DONE2008.12.24Bigger ChallengesChapter3DONE2009.01.15Techniques more subtleChapter4DONE2009.02.03Advanced algorithms and difficult drillsChapter5DONE2009.02.17Serious challengesChapter6DONE2009.02.20Contest Practice花了差不多四个月把USACO做完了,感觉收获很大,它就像一个私人教练能督促你学习一样,对于一个oier来说,USACO绝对是一个不可不做的经典OJ,为了整理一下知识点也当是一次巩固,便写下了这篇总结,以总结一下自己的疏漏,也希望能帮助到别人。
--湖南南县一中czz一、枚举枚举是我们用的比较多的一种算法,编程简单是它的优点,而时间效率低则是它的致命缺点,不过很多题目通过合理的优化比如减小枚举量等来优化算法。
The Clocks是第一道需要优化的枚举题,首先由于这题有9个时钟,而且每个的移动次数也不清楚,似乎无从开始,不过经过研究发现对于一个时钟如果移动四次就会便相当于没有移动,因此我们只需要枚举每个钟的四种状态共9^4共6561种状态,这样就不会超时了,不过如果进一步研究这个题目发现移动方案之间是有约束的,打个比方,A时钟由三种移动方案确定,如果其中的两种方案的次数已经知道,那么第三种方案也就会确定,因此我们只要枚举前三个方案的次数其他的便可以递推出来,状态只有4^3个,效率无疑大大提高。
Arithmetic Progressions这题由于题目要求按b升序排列,所以我们习惯性得把b放在外循环而a放在内循环,这样做加上剪枝后也会超时,由于剪枝时按a 剪枝时力度无疑会更大,因此我们可以把a提到外循环,相应的加一个快排,因此我们得出一个结论:把剪枝有利的尽量放在外循环。
素数的题目也有几个,枚举就行了,不过注意要先生成一定范围内的素数,然后再枚举判断,不过有一种随机化的素数判断可以在klogn内判断,可以参考周咏基的论文《论随机化原理与设计》。
Party Lamp与The Clocks有异曲同工之妙,同样我们可以判断出一个按钮如果按了两次就没有意义了,n值是有小于4时才会限制按键次数否则不予考虑。
不过这样枚举还是会超时,如果再次分析可以发现每六个灯一个循环即灯的最后状态是循环的,因此只要枚举6个灯的状态即可,算法十分优秀了。
Controling Company当时看到这道题时,看到题解是才发现N的范围并不大,完全可以用迭代枚举来求解,即不断枚举更新公司之间的关系,直到无法更新。
可以看出枚举对付一些看起来很复杂的题目很有一套。
Contact也是一道难题,为了判重,我们不得不借助于Hash表,把一个字符串看出一个二进制数,不过为了区分11和0011这样的相同大小的字符串,我们可以先处理长度为1的,再处理长度为2的……知道处理完全。
Camelot应该是USACO里最难的一道枚举题目,首先我们可以用广搜得到棋盘之间的最短路径,然后先枚举汇合点,再枚举汇聚点,最后枚举接国王的骑士,不过这样超时十分严重,继续分析,由于国王走路很慢,因此肯定要让他尽量少走路,我们可以进一步缩小汇聚点的范围,即在国王两部以内,这样就AC 了由此可以看出枚举的一般思路:1、估计枚举量,看是否可行。
2、确定枚举对象,注意把容易剪枝的放在外面。
3、进一步分析看可否减小枚举量(注意挖掘枚举对象之间的约束关系)。
二、动态规划USACO离的动态规划题是比较多的,主要分为几类:1、背包问题Subset sums是一道典型的01背包问题模型,由于它要求求出均等划分的个数,对于奇数的总和特判无解,因此先用动态规划求出装出总重量的一半,由于集合的对称性,即N=3时,{1,2}和{3}是同一中方案,因此将结果除以2即是答案。
Money System,Score Inflation则是完全背包模型,由于物体个数无限,所以我们在实现时只要将一维数组的实现循环倒过来即可。
Stamps是背包问题的变种,不过颇为简单,设can[i]表示i容量能否装出,则can[i]=can[i]or can[i-w[k]]。
Shopping Offers也是dp,不过从一维到了五维,而且实现时要把物体的编号映射为1..5,方便处理。
不过这题有个相当有趣的图论算法:构图,每种购买商品的组合是一个顶点,每种打折方式是一条边,然后SPFA求解。
Beef Mcnuggets是一道有难度的dp,由于题目的范围巨大,直接dp是肯定MLE+TLE,不过我们进行一下数学分析就会发现,题目中的数据是吓人的,如果数据中任意两个数不互质,那么无法装出来的数一定小于最大的两个数的最小公倍数。
此时便可以进行dp了,此题体现了数学分析在信息学奥赛中的作用。
Milk Measureing开始做的时候用的ID迭代加宽搜索+DP,结果由于数据暴弱,竟然过了,但是我在网上找了很久也没有找到纯DP的题解,不知那位大牛可以指教一下。
Raucous Rocker也是一个类背包问题,我们设f[i,j]表示前i张光盘放前j首歌时最多放的个数,那么决策就是第i张光碟放多少,得出方程:F[i,j]=Max(f[i-1,k]+g[k+1,j]);其中g[i,k]表示将第i到第k首歌放在一个光盘中最多放的个数,对于g数组我们可以将数组排序后从左到右扫描即可(可以增设Order[i]表示现在第i个数原来的位置)。
复杂度为O(n^2*m),完美解决了这个问题。
2、与矩形边长有关问题主要有三个问题:Home on the rage Big barn A rectangular Barn其中前两个问题较为简单,用f[i,j]表示以第i行第j列为右下角时最大正方形的边长,则f[i,j]=min(f[i-1,j-1],f[i-1,j],f[I,j-1])+1;即往上面,左边,左上三个方向扩展的最大长度最小值为现在的最大扩展边长。
第三个题目由于是求矩形面积,所以不能简单的套用以前的方程,这里我们设三个数组,L,R,H分别表示向左,向右,向上扩展的最大长度,则:H[i,j]=H[i-1,j]+1;L[i,j]=Min(L[i-1,j],J-最靠近的坏格子(左边的));R[i,j]=Min(R[i-1,j],最靠近的坏格子(右边的));由于会超空间,所以我们可以用数组迭代计算即可。
具体这个方程是怎么来的可以参考王之坤的论文。
3、求解第N个状态问题这种类型以Two Five和Stringsobits为代表,这类题目共同的特点是给定一系列规则构造出一系列对象,要你求第N个状态,而共同的求法就是利用动态规划求出每一位的总数,然后一位一位求解。
Stringsobits由于题目范围巨大,所以模拟是肯定TLE,考虑动态规划:设F[N,L]表示N个0和1组成的1个数小于等于L的数的个数,则F[N,L]=F[N-1,L-1]+F[N-1,L]//分别在前面加一个0和1{上面的方程和组合数的方程及其相似,可以结合理解}边界条件F[I,0]=1;F[0,I]=1;(0<=I<=N);(注意利用小数据推边界条件)求出来以后我们一位一位处理,假设A[I]表示序列的第I位,对于每I为,如果F[I-1,L]<M,那么第I位为1,否则为0;核心代码:For I:=N downto1doIf F[I-1,L]<M Then Begin M:=M-F[I-1,L];L:=L-1;A[I]:=1;endElse A[I]:=0;Two Five一题与上题有异曲同工之妙,虽然我一下子就知道使用动态规划来确定每一位,不过方程颇难想到,只好看了星牛的题解,突然之间意识到:如果一位一位放,因为后面的数都比前面的数大,所以对于一个状态,其解的个数只与其“形状”有光,所以星牛的那种定义方法可行,至于具体由于我还没有理解透彻,就不多说了。
4、其他The Longest Prefix这题注意要整体定义,用Can[j]表示S[1..J]是否可以组成,那么Can[J]=Can[J-Len[i]]And(S[J-Len[i]+1..J]=Word[i]);由于前缀最大长度只有20,因此如果连续20无法得到,就可以结束算法,同时由于是基于字符串比较,我们可以用Trie来优化。
Cow Pedigrees一道有难度的dp,主要原因是因为我们的思想太僵化或者说固执,我刚开始定义F[i,j]表示节点数为I深度为J的个数,结果发现状态很不好转移,看了题解之后发现,只要定义F[I,J]表示节点数为I深度不超过J的个数,就很好进行转移了,所以我们定义状态后如果发现不好转移,可以考虑修改方程使得方程更加抽象,这样有利于转移。
Humble Numbers这题似乎不算动态规划,不过在求解的过程中也包含了动态规划的思想,即有前一个数退出下一个数,对于每一个数设置一个指针,如果这个数*指针所对于的数小于等于前一个数求指针加1,这样推n次皆可得到答案。
A Game是一道博弈型动态规划,对于博弈我还没有认真钻研过,不过还是说说对于这道题的理解:由于要对第二位选手也执行最优策略,所以符合最优化原理,我们设F[I,J]表示第一个取的选手(不一定是第一位选手)在I..J中取数时取得的最大值,Sum[I,J]表示I..J的和。
此时取得选手有两种决策:取最左边或最右边,此时由于要为另外一位选手也执行最优决策,如果取最左边,则F[I,J]=A[I]+(Sum[I+1,J]-F[I+1,J])//取得数+Sum[I+1,J]-另一位选手取的数综合起来,转移方程为:F[I,J]=Max(A[I]+(Sum[I+1,J]-F[I+1,J],A[J]+(Sum[I,J-1]-F[I,J-1]);注意认真体会上面的方程。
Canada Tower一题可以说是动态规划的鼻祖题,IOI97出了这一题,当时的选手没有一个了解动态规划,结果全部用的搜索,结果没一个人AC 了,回国后开始研究这种新算法,从此动态规划成为比赛的热点。
不扯了,说这道题,把问题转化一下,变为从1才是找到两条不相交的航线使得过的点最多,用F[I,J]表示从1开始,一条航线到I,一条航线到J时最多过的点数,则F[I,J]=Max(F[I,K]+1)满足(K<J且Map[K,J]=1)可能有人会问为什么这样得到的方程可以使得航线不相交,如果我们初始化F数组为Maxint,F[1,1]=1,然后第一步DP时就可以保证没有相交的航线,同样由于第一步没有,第二步也没有,因此不存在相交路线。