第121章 全国青少年信息学奥林匹克竞赛

      ()找到回家的路!
    信息学联赛是五大学科里面最为特殊的一项。
    最最重要的原因。
    是因为学校压根就没有开设计算机这门课程。
    虽然说潜北中学里也有着自己的“机房”,但是除了有时候需要学生上网填写信息之外,几乎从来都不对学生们开放。
    不仅如此,其他几个学科的竞赛的名称都是“全国高中xx联赛”,“全国中学生xx竞赛”。
    信息学的全称却是“全国青少年信息学奥林匹克竞赛”。
    可能是因为信息学更加的小众,其中又分为noi和noip,前者为正式竞赛,后者为普及组和拔高组。
    赛程里,又有一堆看起来就十分的麻烦东西。
    如果不是因为强迫症,想要凑齐一个五大学科全能金牌,苏牧是真的懒得去看这些莫名其妙的规章制度。
    不过好在信息学这些东西要等今年下半年才会正式筹备,到时候再跟学校专门负责的老师联系一波应该没什么大问题。
    暑假的话,稍微做做题,刷到三四级的地步应该就已经够用了。
    除了五大学科竞赛之外。
    苏牧还打算试试全国中学生英语能力竞赛和每年一度的新概念作文大赛。
    这些也都是年底才会正式出通知。
    对于苏牧来说只能算是日程表的末端。
    还有一个比较重要的点就是世界影响力
    影响力方面苏牧现在还处于一星,并没有具体的数值只有一个小小的进度条。
    看着进度条的样子,苏牧现在的一星也仅仅完成了不到10%的样子。
    关于这个方面苏牧打算先从小说方面还有视频方面入手,成为一名作家或者成为一个up主。
    不仅可以获得一定的影响力,而且说不定还能获得一定的酬劳。
    尤其是dilidili这几年推出的激励计划,可是养活了相当一大批为爱发电的up主。
    而且,虽然影响力这边现在每个月只能提供一个技能点。
    但是升到后期绝对是一个长期获取技能点的途径。
    零零散散的记录着着些东西。
    回过神来。
    苏牧愕然的发现自己的事情好像真的挺多的。
    虽然压力不是很大,都是些送技能点的竞赛。
    但是积累起来还是得花时间去磨炼。
    “还是先得把身体素质多点个两级。”
    苏牧默默的想到。
    .......
    “叮!您进入了五级图书馆,学习所获得的所有积分增幅100%”
    “叮!您查看了信息学题目,信息学积分+1,当前积分1100,等级:一级。”
    因为浙东外语外贸大学里有些学生暑期需要在学校里复习考研,所以图书馆会在暑期里的周一到周五的白天开放到晚上八点,周六周末闭馆。
    因为没有其他事情的束缚,苏牧现在的行动力变得很高。
    回到家后的第一个工作日,便开始了自己的图书馆之旅,他现在做的事情是要把信息学这个学科重头开始学起。
    但是,才刚刚上手,他就觉得有些不适应。
    因为信息学实在是太杂了。
    初赛考察通用和实用的计算机普及科学知识,以笔试为主。
    复赛为程序设计,须在计算机上调试完成。
    而不论是计算机普及科学知识还是程序设计,苏牧都得从头开始学起。
    他现在手上的两本书是在淘宝上购买的《信息学奥赛一本通·提高篇》和《信息学奥赛之数学一本通c++版》
    “近些年来的信息学竞赛试题,经常出现求一个问题的可行解或者最优解的题目,这类问题统称为最优化问题,贪心算法是求解这一类问题的常用方法。”
    苏牧首先打开的是这本《信息学奥赛一本通·提高篇》
    “最优化问题。”他摸了摸下巴,脑海中闪过了几种数学里关于最优化的解决方案。
    信息学很多东西本身就是与数学相通的,这让他的心境稍微稳了积分。
    但是,当他看到例题的时候,脑海中瞬间就出现了几个问号。
    题目1:在n行m列的正整数矩阵中,要求从每行中选取一个数,使得选出的n个数的和最大。
    解析:本题可以用贪心算法求解,选n次,每一次选出相应行中的最大值即可。
    苏牧:“......”
    这种题目还需要解析??
    这不是理所当然的吗?
    他看向了第二个题目。
    题目2:在一个n??m的方格阵中,每一个格子赋予一个数(即权值),规定每次移动时只能向上或者向右,现试找一条路劲,使其从左下角至右上角所经过的权值之和最大。
    解析:在这种情况下.....
    一步一步看下来。
    苏牧倒也没觉得有什么难的,只不过是一些取极值的问题。
    但是,当他翻到后面的经典习题和解析的时候,整个人都不好了。
    【经典习题】在8x8方格的棋盘上,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径。
    解析:首先这是一个搜索问题,运用深度优先搜索进行求解,算法如下:
    1输入初始位置坐标x,y;
    2步骤c:
    如果c64输出一个解,返回上一步骤c
    (x,y)←c
    计算(x,y)的八个方位的子结点,选出那些可行的子结点
    循环遍历所有可行子结点,步骤c++重复2
    显然2是一个递归调用的过程,大致如下(c++程序解析):
    #definen8
    voiddfs(intx,inty,intcount)
    {
    inti,tx,ty;
    if(countn*n)
    {
    output_solution();输出一个解
    return;
    }
    for(i=0;i8;i++)
    {
    tx=hn[i].x;hn[]保存八个方位子结点
    ty=hn[i].y;
    s[tx][ty]=count;
    dfs(tx,ty,count+1);递归调用
    s[tx][ty]=0;
    }
    }
    这样做是完全可行的,因为它输入的是全部解。
    但是马遍历当8x8时解是非常之多,用天文数字形容也不为过,这样一来我们的求解的过程就非常慢,并且出一个解的时间也会也非常慢。
    当我们在每个结点对其子结点进行选取的时候,优先选择‘出口’最小的进行搜索,‘出口’的意思是在这些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳。
    如果优先选择出口多的子结点,那出口少的子结点就会越来越多,很可能出现‘死’结点
    这样对下面的搜索纯粹是徒劳,这样就会浪费很多无用的时间。
    反过来如果每次都优先选择出口少的结点跳,那出口少的结点就会越来越少,这样跳成功的机会就更大一些。
    .......
    苏牧:“。。。。”
    他的脑海中再次缓缓的出现了一堆问号。
    完全没想到居然会有这么大的跨越。
    看着仅仅只有一个小题,却是密密麻麻的解析,苏牧突然明白了为什么数学奥赛参加的人那么多,信息学奥赛参加的人却那么少。
    这东西,确定是适合青少年做的??
    不会秃顶吗??
    ......
    ps:因为要开始上网课了...要准备的东西挺多的,后面也会慢慢忙起来,所以更新时间偶尔会些变化,但是每天两更应该可以保持住...
    ps2:弱弱的求几张推荐票。