资源描述:
《NoiP2003提高组复赛试题分析_天津南开中学滕伟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、我看了李学武教授写的《关于NOIP复赛的若干问题的思考》一文,有很大触动,深刻感受到天津市信息学奥赛基础薄弱。我从事奥赛培训工作十三年,培训的学生在全国取得了一些好成绩,一块国际银牌,四块全国奥赛金牌,三块银牌,十块铜牌。我认为我有责任将我的培训工作介绍给同人和其他学校的同学,来推动天津市奥赛的发展。下面是我写的今年分区联赛高中组复赛的解题分析,供大家参考,并恳切希望能与“OIER”交流共勉。天津南开中学滕伟(邮编:300100,电子邮箱:fnoi2003@126.com或tjnkzx2000@yahoo.com.cn)第一题:神经网络【试题分析】一、题意分析1、任务描述:从输入层开始,
2、各节点按照传递公式,一层一层向下传递。输出输出层中信号大于零的节点编号和信号大小。(节点编号由小到大)如果没有满足条件的编号则输出NULL。信号传递公式:公式中的Wji(可能为负值)表示连接j号神经元和i号神经元的边的权值。当Ci大于0时,该神经元处于兴奋状态,否则就处于平静状态。当神经元处于兴奋状态时,下一秒它会向其它神经元传递信号,信号的强度为Ci。2、输入:两个整数n(1≤n≤20)和p。n表示节点的个数;p表示有向边的条数。下面n行表示1-n号节点的状态和阈值。下面p行表示有向边及其权值。3、输出:输出输出层状态大于零的神经元编号和状态,并且按照编号有小到大顺序输出!若输出层的神
3、经元最后状态小于等于0,则输出NULL。二、问题分析1、题目中给出每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。所以不必进行拓扑排序,一层一层的向下传递信号即可。输出最后一层中信号大于零的节点编号。2、可以建立一个队列,将输入层节点入队。3、取队首节点出队,寻找此节点有向边,如果有有向边:1)则记录此节点不是输出层;2)再判断此节点信号大于零则向下传递信号,将指向的节点入队(防止重复入队)。再出队再传递,直至全部出队。注意:1)输入层可以是输出层。2)信号传递公式中只减一次U[i]。【程序清单】下面是我校学生肖天同学写的程序。{NOIP2003Problem1byXia
4、oTian}{Test1..5:Allright}Programnetwork;ConstInName='network.in';OutName='network.out';MM=100;VarInFile,OutFile:Text;C,U:Array[1..MM]OfLongInt;Map:Array[1..MM,1..MM]OfLongInt;Flag:Array[1..MM,1..MM]OfBoolean;IsOut:Array[1..MM]OfBoolean;Queue:Array[1..MM]OfLongInt;N,P,i,Int1,Int2,Head,Rear:LongInt
5、;IsInQueue:Array[1..MM]OfBoolean;IsNull:Boolean;BeginAssign(InFile,InName);Reset(InFile);ReadLn(InFile,N,P);Fori:=1ToNDoReadLn(InFile,C[i],U[i]);FillChar(Flag,SizeOf(Flag),False);Fori:=1ToPDoBeginRead(InFile,Int1,Int2);ReadLn(InFile,Map[Int1,Int2]);Flag[Int1,Int2]:=True;End;Close(InFile);FillChar
6、(IsOut,SizeOf(IsOut),True);FillChar(IsInQueue,SizeOf(IsInQueue),False);Head:=1;Rear:=1;Fori:=1ToNDoBeginIfC[i]>0ThenBeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;EndElseC[i]:=-U[i];End;WhileHead0ThenBeginInc(C[i],Map[Queue[
7、Head],i]*C[Queue[Head]]);IfNotIsInQueue[i]ThenBeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;End;End;IsOut[Queue[Head]]:=False;End;Inc(Head);End;Assign(OutFile,OutName);Rewrite(OutFile);IsNull:=True;Fori:=1ToNDoIfIsO