动态规划之多边形游戏

目录

  1. 多边形游戏简介
  2. 举例以及详细分析
  3. 代码块
  4. 测试结果

多边形游戏简介

问题描述:
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。

  游戏第1步,将一条边删除。

  随后n-1步按以下方式操作:

  (1)选择一条边E以及由E连接着的2个顶点V1和V2;

  (2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。

  最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。

  问题:对于给定的多边形,计算最高得分。

  1. 设所给定的多边形的顶点和边的顺时针序列位 op[1],v[1],op[2],v[2],….,op[n],v[n],其中,op[i]表示第i条边所对应的运算符,v[i]表示第i个顶点上的数值,i=1~n。
  2. 在所给多边形中,从顶点i(1<=i<=n)开始,长度为j的(链中有j个顶点)的顺时针链p(i,j)可以表示为:
    v[i],op[i+1,v[i+1],op[i+2],……,v[i+j-1];
  3. 如果这条链的最后一次合并运算在op[i+s]处发生(1<=s<=j-i),则可在op[i+s]处将链分为两个子链p(i,s)p(i+s,j-s);
  4. 设m1是对子链p(i,s)的任意一种合并方式得到的值,而a和b分别是在所有可能的合并中得到的最小值和最大值。m2是子链p(i+s,j-s)的任意一种合并方式得到的值,而c和d分别是在所有的可能的合并中得到的最小值和最大值。依次定义有a<=m1<=b,c<=m2<=d;
  5. 由于子链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

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值