问题
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构 成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个 运算符“+”或“*”。所有边依次用整数从1到n编号。
游戏第1步,将一条边删除。 随后n-1步按以下方式操作: (1)选择一条边E以及由E连接着的2个顶点V1和V2;
(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。 将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新 顶点。E
最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶 点上的整数值。
问题:对于给定的多边形,计算最高得分。
以此图举例

我们先断边1,那么524+(-7)=33最大
我们断边2,那么425+(-7)=33最大
我们断边3,那么25+(-7)+4=7最大
我们断边4,那么24+(-7)+5=6最大
这里面最大的值为33
思路
我们可以用一个数组储存断不同边得到的值
过程:
断掉一条链可以将原链分为两条链,通过求两条链的最值,再将通过断掉链的操作符进行操作,即
断掉一条边后分为了两条链,用四个数记录两条链的最大值与最小值(注意这里记录最小值是由于断掉的链的操作符可能为乘,而出现负负得正的情况),即划分、合并过程。
递归边界就是只剩下两个操作数与一个操作符,此时我们能得到最大最小值,重要的是我们要去遍历断链的位置,计算第一次端哪条链可得到总体最大值。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int n,v[N],m[N][N][2];
char op[N];
void MinMax(int n,int i,int k,int j,int &minf,int &maxf){
//最大值和最小值
int e[5],r;
int a=m[i][k][0],b=m[i][k

本文深入探讨了一种名为多边形游戏的单人游戏算法,玩家需在由顶点和边组成的多边形中,通过删除边并计算剩余顶点的值来获取最高得分。文章详细介绍了游戏规则,提出了通过递归划分链路、记录每段链路最大最小值的策略,并给出了具体实现代码,展示了如何计算最优解。
&spm=1001.2101.3001.5002&articleId=105528130&d=1&t=3&u=7019039046a640c1a4bee30893b6f524)
433

被折叠的 条评论
为什么被折叠?



