零点看书

字:
关灯 护眼
零点看书 > 假装自己是学霸 > 第一百二十二章 全国青少年信息学奥林匹克竞赛

第一百二十二章 全国青少年信息学奥林匹克竞赛

第一百二十二章 全国青少年信息学奥林匹克竞赛 (第2/2页)

信息学很多东西本身就是与数学相通的,这让他的心境稍微稳了积分。
  
  但是,当他看到例题的时候,脑海中瞬间就出现了几个问。
  
  题目1在n行列的正整数矩阵中,要求从每行中选取一个数,使得选出的n个数的和最大。
  
  解析本题可以用贪心算法求解,选n次,每一次选出相应行中的最大值即可。
  
  苏牧“”
  
  这种题目还需要解析??
  
  这不是理所当然的吗?
  
  她看向了第二个题目。
  
  题目2在一个n??的方格阵中,每一个格子赋予一个数(即权值),规定每次移动时只能向上或者向右,现试找一条路劲,使其从左下角至右上角所经过的权值之和最大。
  
  解析在这种情况下
  
  一步一步看下来。
  
  苏牧倒也没觉得有什么难的,只不过是一些取极值的问题。
  
  但是,当他翻到后面的经典习题和解析的时候,整个人都不好了。
  
  【经典习题】在8x8方格的棋盘上,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径。
  
  解析首先这是一个搜索问题,运用深度优先搜索进行求解,算法如下
  
  1输入初始位置坐标x,y;
  
  2步骤
  
  如果ampapgt64输出一个解,返回上一步骤--
  
  (x,y)←
  
  计算(x,y)的八个方位的子结点,选出那些可行的子结点
  
  循环遍历所有可行子结点,步骤++重复2
  
  显然2是一个递归调用的过程,大致如下(++程序解析)
  
  defen8
  
  voiddfs(tx,ty,tunt)
  
  {
  
  ti,tx,ty
  
  if(untampapgtnn)
  
  {
  
  output_sotn()//输出一个解
  
  return
  
  }
  
  for(i=0iampaplt8i++)
  
  {
  
  tx=hn[i]x//hn[]保存八个方位子结点
  
  ty=hn[i]y
  
  s[tx][ty]=unt
  
  dfs(tx,ty,unt+1)//递归调用
  
  s[tx][ty]=0
  
  }
  
  }
  
  这样做是完全可行的,因为它输入的是全部解。
  
  但是马遍历当8x8时解是非常之多,用天文数字形容也不为过,这样一来我们的求解的过程就非常慢,并且出一个解的时间也会也非常慢。
  
  当我们在每个结点对其子结点进行选取的时候,优先选择‘出口’最小的进行搜索,‘出口’的意思是在这些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳。
  
  如果优先选择出口多的子结点,那出口少的子结点就会越来越多,很可能出现‘死’结点
  
  这样对下面的搜索纯粹是徒劳,这样就会浪费很多无用的时间。
  
  反过来如果每次都优先选择出口少的结点跳,那出口少的结点就会越来越少,这样跳成功的机会就更大一些。
  
  苏牧“。。。。”
  
  他的脑海中再次缓缓的出现了一堆问。
  
  完全没想到居然会有这么大的跨越。
  
  看着仅仅只有一个小题,却是密密麻麻的解析,苏牧突然明白了为什么数学奥赛参加的人那么多,信息学奥赛参加的人却那么少。
  
  这东西,确定是适合青少年做的??
  
  不会秃顶吗??
  
  ps因为要开始上网课了要准备的东西挺多的,后面也会慢慢忙起来,所以更新时间偶尔会些变化,但是每天两更应该可以保持住
  
  ps2弱弱的求几张推荐票。
  
  。
『加入书签,方便阅读』
热门推荐
逆剑狂神 近战狂兵 御鬼者传奇 风流杀神 英雄无敌之恶魔降临 近身兵王 神级插班生 都市绝品狂尊 娱乐帝国系统 大明流匪