- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NOI 2001 解题报告
第一题:食物链(eat)
并查集。
本题如果想当然的认为直接确定每个物种属于ABC的哪种就错了。
实际上,我们只能得到部分的关系。
将每种动物看做一个点,如果A吃B,那么引一条有向边AB。
如图,对于左边的图,将D和B合并,就转换成右边的图。
维护这样的三角形环,用并查集处理点合并。
对于每个D,X,Y:
D=1,如果X,Y属于不同的三角形环,那么将对应的3个点(X和Y,依边的指向依次确定以后的点)都合并,如果X,Y同属于一个三角形环却不是同一点,那么矛盾,判断是假话。
D=2,如果X,Y属于不同的三角形环,那么将对应的3个点(X指向的点和Y,依边的指向依次确定以后的点)都合并,如果X,Y同属于一个三角形环但Y不是X指向的点,那么矛盾,判断是假话。
因为每个点一开始都是一个孤点,为了编程的方便,为每个点添加两个虚点,构成一个三角形环,则在以后的操作中只需考虑三角形环的合并。
?
第二题:反正切函数的应用(arctan)
根据公式4,不难得出:枚举b,根据(1)计算b+c的值,只需要在附近寻找最近的整点坐标。
按照道理应该是同时在两边寻找,但实际上由于b+c在右侧增长十分缓慢,所以只在左侧找。
?
第三题:聪明的打字员(clever)
BFS,开一个大数组判重。
?
第四题:炮兵阵地(cannon)
?
算法一:随机化+调整
顾名思义,每次随机一个平原位置,在该处放入一个炮兵,同时将该炮兵可以攻击到的所有炮兵去掉。更新最大值。
但这种随机是非常不稳定的。在此基础上加一点限制:每次去掉的炮兵数不能大于1,保证每次加入炮兵后总数不减。
加上这个限制后,在时间限制范围内随机3000000次,稳定性还可以,可以过5~7个数据(WA的数据差距也很小,看你RP了)。
如果是求较优解,这个方法诚然是不错的,但显然对于这道题来说,肯定存在更好的方法。
?
算法二:动态规划
本题的动态规划并不好看出来。
注意m最大只有10,尝试以行为阶段进行动态规划。
就一行来说,在不考虑地形的条件下,放置炮兵的约束条件只有:相邻两炮兵的距离≥2。
可以用搜索的方式确定放置一行炮兵的所有方案,同时确定每种方案下的炮兵数num。(最多只有60种方案)
从炮兵的影响范围来看,对于第i行炮兵的放置,除了地形因素外,只须考虑i-1,i-2行炮兵的放置情况。
设dp[i,j,k]表示i-2行用方案j放置炮兵,i-1行用方案k放置炮兵的情况下,前i行最大能放置的炮兵数。
转移方程:max(dp[i,j,k]+num[u])→dp[i+1,k,u],方案u和j,k不矛盾且都符合地形限制。
?
一些优化:每行的状态可以看成一个二进制数,这样可以大大节省空间。同时,在判断方案间是否矛盾以及是否符合地形时可以用为操作(and,or)从而可以减少运行时间。
?
参考资料:《浅谈记忆化搜索》作者:吴景岳
?
第五题:方程的解数(equation)
如果用搜索的话复杂度是O(mn),能想到的剪枝就是上下界判断,这个剪枝的强度不能保证在时限内出解。
换一种思路,因为n最大只有6,不妨将前三项留在左边,剩余的放到等号右边。
枚举等号左边所有可能的值,记录每个值对应的个数,再枚举等号右边的值,如果相等,则将对应的个数加到总数中。
因为没有足够的空间来存储所有的值,可以用Hash表来存储(去一个极大数的余数),用链表处理冲突。
做一个预处理来减少指数运算的速度,设x[i,j]=ip[j]即可。
?
第六题:陨石的秘密(secret)
动态规划
设dp[i,j,k,d]表示用i对{}、j对[]、k对()组成的深度不超过d的SS表达式的个数。
一个SS表达式具有树结构。最外层的括号是该括号内所有次外层括号的父节点。
对于状态(i,j,k,d)来说,取出其中其中一部分括号(i’,j’,k’,i’≤i,j’≤j, k’≤k,i’+j’+k’0),用它组成一棵树,设其个数为single(i’,j’,k’,d);用剩下的(i-i’,j-j’,k-k’)组成若干棵树,其个数显然为dp[i-i’,j-j’,k-k’,d]。
根据加法原理和乘法原理有:dp[i,j,k,d]=∑single(i’,j’,k’,d)×dp[i-i’,j-j’,k-k’,d]
对于single(i,j,k,d),为它确定一个根节点,然后考虑它的儿子节点,因为该树要能包含所有的括号,所以优先考虑i,然后j,最后k。
于是有:
边界条件:dp[0,0,0,i]=1
题目要求深度恰好为d的表达式个数,则为dp[l1,l2,l3,d]-dp[l1,l2,l3,d-1]。
因为在计算dp的过程中只有+*运算,所以只需保留11380的余数。
您可能关注的文档
最近下载
- 第五章热模锻压力机.ppt VIP
- 拼搏初三,决胜中考 开学第一课主题班会课件.pptx VIP
- 20190821合法合规催收承诺书.docx VIP
- 抗日战争胜利80周年阅兵.pptx VIP
- (正式版)D-L∕ T 620-1997 交流电气装置的过电压保护和绝缘配合.docx VIP
- 《显示技术原理》课件:液晶基础知识详解.ppt VIP
- 汉字练习字帖(可编辑打印).docx VIP
- 心衰患者的容量管理.pptx VIP
- 2025湖北潜江市面向退役军人专项招聘教师2人笔试参考题库附答案解析.docx VIP
- 2025广西现代物流集团第三次公开招聘109人笔试备考题库及答案解析.docx VIP
文档评论(0)