Loading...

NOIp 2000 提高组解题报告

September 9th, 2008 Leave a comment Go to comments

题一   进制转换:

负进制,短除法,但是余数小于0时要从上一位借位(商+1,余数-进制数)(LRJ大牛提出)

 

题二   乘积最大:

动规+递归

设d(i,j,k)为第i-j个数字中用k个乘号所取得的最大乘积。

转移方程(我直接用递归调用 ^_^):

d(i,j,k)=max{数(第i到第t个字)*d(t,j,k-1)}   (i<=t<=j-1)

临界:所有k=0的值就为原来的值。

 

题三   单词接龙:

求出一张表示每两个单词(有序)之间的增长字母数的表,根据这张表枚举第一个单词来搜。居然全不超时。但是发现有的单词可以用两遍,囧。

 

题四   方格取数:

一直没想通。LRJ的报告太草了。飞机的报告里面是“广搜式Dp,效率还不错。可能数据比较弱。”,囧;

Google了一下,发现“上帝的右手”大牛的报告不错:

两条路线同时进行的动态规划

阶段:按所走的步数来分阶段,从左上角走到右下角,共2n-1个步骤,故共2n-1个阶段。但,有两条线路,故每一阶段的状态都会复杂一些。

状态:有两线路同时走,在某阶段的某状态,要用两个坐标来分别表示两线路的两个点。如:第一阶段,共一个状态:(1,1),(1,1);第二阶段,(1,2),(1,2);(1,2),(2,1);(2,1),(1,2);(2,1),(2,1)共四个状态。

  由于在第k阶段的任何两个点的x,y坐标是有关系的:k+1=x+y。故可只用x坐标来表示一点的坐标,故状态可表示为(x1,x2),对应的y坐标为:y1=k+1-x1,y2=k+1-x2。

决策:若用0,1分别表示向下或向右走,则每个状态的可能决策有四种:(1,1),(0,0),(1,0),(0,1)。两个数值分别表示两个点的下一步走向。

状态转移方程:

  设map(x,y)为方格图,f(k,x1,x2)表示第k个阶段走到(x1,x2)状态的最大和

  f(0,1,1)=map(x1,1+1-x1) 即map(1,1)

  f(k,x1,x2)=max{f(k-1,x1′,x2′)+map(x1,y1)|x1=x2,f(k-1,x1′,x2′)+map(x1,y1)+map(x2,y2)|x1<>x2} (x1′,x2′)表示可通过某决策到达(x1,x2)的所有点

 

明天再把第四题实现一下,就要进入恐怖的2001后了。。。

Share and Enjoy:
  • Google Bookmarks
  • del.icio.us
  • Facebook
  • FriendFeed
  • Twitter
  • 豆瓣
Categories: Trivia Tags:
  1. No comments yet.
  1. No trackbacks yet.