动态规划法----多边形游戏问题

一、题目

     给出一个多边形,满足:

          1. 每个顶点是一个数值

          2. 每条边是一个符号

     我们将某个边断开,形成一条数值和符号组成的链,然后计算这条链的值。

          1· 可以选择任意一条边断开。

          2.求链的值时,可以不必按运算符的优先级顺序,任意选择先后

    题目的要求是得到最大的值

 

二、示例

 

 

三、分析

      1. 如上图,我们将图的信息保存如下:

          顶点数:REAL_SIZE = 3

          顶点:v[3] = {1,2,3}

          边: op[3] = {'+','x','+'}

     

      2. 假如我们从 边i 断开,则形成了链

          v[i],op[i+1],v[i+1],op[i+2] .....v[i+s-1],op[s],v[i+s]...op[i-1],v[i-1]

 

          计算得到其最大值,题目要求的最大值,也就是分别将每个边断开后,能得到的每条链的最大值中的最大的。

 

      3. 为了计算方便,我们记:

          p[i,j] 表示从顶点i开始,包括j个顶点的链

          m[i,j,0]表示这条链的最小值

          m[i,j,1]表示这条链的最大值

          这样 i 从 0到REAL_SIZE 的所有 m[i,REAL_SIZE,1]中最大的就是题目要的结果

 

      4. 将p[i,j]在op[i+s]处断开,则形成两条链p[i,s],和p[i+s,j-s]

          得到p[i,s]和p[i+s,j-s]的最小值和最大值,就可以得到p[i,j]在s处断开的最大值最小值

          当s 从1开始到 j-1,分别得到 对应的断开方法的最值,从这些最值中选择最小和最大的作为m[i,j,0]和m[i,j,1]

 

四、代码如下

         

 

 

posted @ 2010-11-13 15:54  JarvisChu  阅读(451)  评论(0编辑  收藏  举报