算法设计作业 多边形游戏 动态规划

这是一个关于多边形游戏的算法设计问题,玩家需要移除一条边并根据边上的运算符对相邻顶点的数值进行运算,目标是最大化最终得分。通过动态规划方法,可以建立状态转移方程dp[i][j]=max(dp[i][j], d(i, k) * d(k+1, j))来求解,其中$表示与k+1之间的运算符。给定一个样例输入5 3*5+6+-7*3+,输出的最大得分为78。" 136876629,14845271,荣耀Magic 6首发dToF LiDAR:安卓阵营新里程碑,"['移动开发', '3d', '人工智能']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定N个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且N条边按照顺时针

依次编号为1~N。下图给出了一个N=4个顶点的多边形。

 游戏规则 :(1) 首先,移走一条边。 (2) 然后进行下面的操作: 选中一条边E,该边有两个相邻的顶点,不妨称为V1和V2。对V1和V2顶点所标的整数按照E上所标运算符号(+或是×)进行运算,得到一个整数;用该整数标注一个新顶点,该顶点代替V1和V2 。 持续进行此操作,直到最后没有边存在,即只剩下一个顶点。该顶点的整数称为此次游戏的得分(Score)。

思路:

环状的用两倍的数组储存,删掉一条边后转换成去给一个式子加括号,怎么加使值最大。

状态转移方程:dp[i][j]=max(dp[i][j],d(i,k)$d(k+1,j));

$表示与k+1之间的运算符,i<=k<j.

 样例输入:5 3*5+6+-7*3+

样例输出:78

代码:

#include<bits/stdc++.h>
#define INF -9999999
using namespace std;
const int maxn = 100;
int num[maxn];
char s[maxn];
int dp[maxn][max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值