实验目的和要求
目的:利用动态规划实现多边形游戏
要求:给定一个多边形,顶点和边已进行标注。问:按照游戏规则,最高得分(最优值)是多少?对应最高得分,按照什么顺序移走边(最优解)?
规则:游戏第一步,将一条边删除。随后n-1步按照以下方式操作
- 选择一条边E以及由E连接着的两个顶点V1和V2;
- 用一个新顶点取代边E以及由E连接着的两个顶点V1和V2。将由顶点V1 和V2的整数值通过边E上的运算得到的结果赋予新顶点。
解题思路
①由于多边形为环形,为方便处理,创建一个两倍于多边形顶点数的数组,用于存储多边形顶点。即val[i+n] = val[i],i<n。
②根据游戏规则,边的删除是不按照顺序进行的,即若需要求i号顶点到j号顶点的最高得分,则i与j之间必然存在一点k,使最高得分为i到k的最优值与k+1到j的最优值进行k号运算符的运算。转化为动态规划,状态转移方程:dp[i][j]=max{dp[i][j],count(dp[i][k],dp[k+1][j],sign[k])},count(int a,int b,char c)用于计算a与b按照c进行运算的最大值。
③动态规划初值问题,dp[i][i]表示i号顶点到i号顶点的最优值,即为val[i]。n个顶点的最优值可以通过一次求解