题一 进制转换:
负进制,短除法,但是余数小于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后了。。。