目录
- 多边形游戏简介
- 举例以及详细分析
- 代码块
- 测试结果
多边形游戏简介
问题描述:
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。
游戏第1步,将一条边删除。
随后n-1步按以下方式操作:
(1)选择一条边E以及由E连接着的2个顶点V1和V2;
(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。
最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。
问题:对于给定的多边形,计算最高得分。
- 设所给定的多边形的顶点和边的顺时针序列位 op[1],v[1],op[2],v[2],….,op[n],v[n],其中,op[i]表示第i条边所对应的运算符,v[i]表示第i个顶点上的数值,i=1~n。
- 在所给多边形中,从顶点i(1<=i<=n)开始,长度为j的(链中有j个顶点)的顺时针链p(i,j)可以表示为:
v[i],op[i+1,v[i+1],op[i+2],……,v[i+j-1]; - 如果这条链的最后一次合并运算在op[i+s]处发生(1<=s<=j-i),则可在op[i+s]处将链分为两个子链p(i,s)和p(i+s,j-s);
- 设m1是对子链p(i,s)的任意一种合并方式得到的值,而a和b分别是在所有可能的合并中得到的最小值和最大值。m2是子链p(i+s,j-s)的任意一种合并方式得到的值,而c和d分别是在所有的可能的合并中得到的最小值和最大值。依次定义有a<=m1<=b,c<=m2<=d;
- 由于子链p(i,s)和p(i+s,j-s)的合并方式决定了p(i,j)在op[i+s](为符号+或*)处断开后的合并方式,在op[i+s]处合并后的值为m=(m1)opi+s;
(1)当op[i+s]=’+’时,显然有a+c≤m≤b+d
(2)当op[i+s]=’*’时,有min{ac,ad,bc,bd}≤m≤max{ac,ad,bc,bd}
举例以及详细分析
如给出的次多边形可以看成一条链:
题目要求是删除一条边,然后按照步骤求最后的最大值,有题可知删除哪一条边&#x