POJ 1179 Polygon 区间DP (详细题解)

Polygon

题意

“多边形游戏” 是一款单人益智游戏。在游戏开始时,系统给定玩家一个N边形,该N边形由N个顶点和N条边构成,每条边连接两个相邻的顶点。在每个顶点上写有一个整数,可正可负。在每条边上标有一个运算符“+”(加号)或“*” (乘号)。
第一步,玩家需要选择一条边,将它删除。接下来再进行N-1步,在每一步中玩家选择一条边, 把这条边以及该边连接的两个顶点用一个新的顶点代替,新顶点上的整数值等于删去的两个顶点上的数按照删去的边上标有的符号进行计算得到的结果。最终剩下一个顶点,顶点上的数值就是玩家的得分。

请计算对于给定的N边形,玩家最高能获得多少分,以及第一步有哪些策略可以使玩家获得最高得分。
1≤N≤50,保证玩家无论如何操作,顶点上的数值均在[- 32768,32767]之内。

题解

首先容易想到枚举删除每一条边,dp[l][r]表示把第l到r的顶点合成之后最大的数值。但是把顶点上最大的数值作为子问题的解对于这一题是不行的,因为最大的数值也可以是2个最小的负数相乘得到,但是如果把最大和最小值同时作为子问题的信息,就可以满足最优子结构了。

最大值只能是2个最大值相加或者相乘,或者2个最小值相乘。

最小值只能是2个最小值相加或者相乘,或者一个最大值和一个最小值相乘,或者2个最大值相乘(当2个子区间的最大最小值全为负数时)。
dp[l][r][0] 为区间[l,r] 的最大值, dp[l][r][1] 为区间[l,r] 的最小值;
d p [ l , r , 0 ] = max ⁡ l ≤ k &lt; r { d p [ l , k , 0 ] &ThinSpace; o p &ThinSpace; d p [ k + 1 , r , 0 ] op ∈ {+,*}  d p [ l , k , 1 ] &ThinSpace; ∗ &ThinSpace; d p [ k + 1 , r , 1 ] dp[l,r,0] = \max\limits_{ l \le k&lt;r } \left\{ \begin{array}{ll} dp[l,k,0 ]\,op \,dp[k+1,r,0] &amp; \textrm{op$\in $\{+,*\} }\\ dp[l,k,1 ]\,* \,dp[k+1,r,1] \end{array} \right. dp[l,r,0]=lk<rmax{ dp[l,k,0]opdp[k+1,r,0]dp[l,k,1]dp[k+1,r,1]op{+,*} 
d p [ l , r , 1 ] = min ⁡ l ≤ k &lt; r {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值