Polygon
题意:给定一个环,每个节点是一个数字,每条边是加号或者乘号。首先删除一条边,接下来重复下列方式进行游戏:1. 选取一条边,删除它。2. 把删除的边两端的数字按照符号合并为一个新的节点。直到没有边。
分析:简单的 Dp 问题,如果用 f[i][j]表示将环拆开后再复制一遍后,从 i号节点到 j号节点经过运算后的最大值,那么
f[i][j]=max(f[i][k],f[k+1][j])(k∈[i,j))
f[i][i+n−1]的最大值即猥琐求
但是: 注意到: 题中说明运算中数字大小在 (-32768,32767) 区间内,所以说明有负数。两个负数的乘积可能为很大的正数。所以题中需要转移两个量:最大值和最小值。
令 mn[i][j]为从 i到 j所得的最小值,mx[i][j]为最大值,则
$mx[i][i+j]=max(mn[i][k]mn[k+1][i+j],mx[i][k]mx[k+1][i+j]);$
$mn[i][i+j]=min(mx[i][k]mn[k+1][i+j],mx[i][k]mn[k+1][i+j],mn[i][k]*mx[k+1][i+j]);$
0 条评论