首页 > 玄幻魔法 > 假装自己是学霸

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

目录

优化问题,贪心算法是求解这一类问题的常用方法。”

苏牧首先打开的是这本《信息学奥赛一本通·提高篇》

“最优化问题。”他摸了摸下巴,脑海中闪过了几种数学里关于最优化的解决方案。

信息学很多东西本身就是与数学相通的,这让他的心境稍微稳了积分。

但是,当他看到例题的时候,脑海中瞬间就出现了几个问号。

题目1在n行列的正整数矩阵中,要求从每行中选取一个数,使得选出的n个数的和最大。

解析本题可以用贪心算法求解,选n次,每一次选出相应行中的最大值即可。

苏牧“”

这种题目还需要解析??

这不是理所当然的吗?

她看向了第二个题目。

题目2在一个n??的方格阵中,每一个格子赋予一个数(即权值),规定每次移动时只能向上或者向右,现试找一条路劲,使其从左下角至右上角所经过的权值之和最大。

解析在这种情况下

一步一步看下来。

苏牧倒也没觉得有什么难的,只不过是一些取极值的问题。

但是,当他翻到后面的经典习题和解析的时候,整个人都不好了。

经典习题在8x8方格的棋盘上,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径。

解析首先这是一个搜索问题,运用深度优先搜索进行求解,算法如下

1输入初始位置坐标x,y;

2步骤 c:

nt 64输出一个解,返回上一步骤c

(x,y← c

计算x,y)的八个方位的子结点,选出那些可行的子结点

循环遍历所有可行子结点,步骤c++重复2

显然2是一个递归调用的过程,大致如下(c++程序解析)

defe n 8

nid dfst x,t y,t unt

{

t i,tx,ty

ntnn

{

nn输出一个解

return

}

nri0 iaalt8 i++

{

txhn[i]xhn[]保存八个方位子结点

tyhn[i]y

s[tx][ty]unt

dfstx,ty,unt+1递归调用

s[tx][ty]0

}

}

这样做是完全可行的,因为它输入的是全部解。

但是马遍历当8x8时解是非常之多,用天文数字形容也不为过,这样一来我们的求解的过程就非常慢,并且出一个解的时间也会也非常慢。

当我们在每个结点对其子结点进行选取的时候,优先选择‘出口’最小的进行搜索,‘出口’的意思是在这些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳。

如果优先选择出口多的子结点,那出口少的子结点就会越来越多,很可能出现‘死’结点

这样对下面的搜索纯粹是徒劳,这样就会浪费很多无用的时间。

反过来如果每次都优先选择出口少的结点跳,那出口少的结点就会越来越少,这样跳成功的机会就更大一些。

苏牧“。”

他的脑海中再次缓缓的出现了一堆问号。

完全没想到居然会有这么大的跨越。

看着仅仅只有一个小题,却是

本章未完,下一页继续

书页 目录
好书推荐: 褚先生日常被嫌弃 抗联薪火传 机战王朝 火影商店 儒女可教 侯门嫡女,相公宠上瘾 我的徒弟都是大反派 急婚如律令 认真就变强 吞天剑神