这是一道区间型的动态规划题;
我主要是对前方的一些dp题解补充一些小细节。
既然是动规,那么首先讲一下常用的填表法和刷表法:
填表法就是利用状态转移方程和上一个状态来推导出现在的状态(相当于知道已知条件,将答案填入)
刷表法就是利用当前的状态,把有关联的下一状态都推出来。
这道题我选用的是填表法。
理解一下题目大意:
关灯不需要额外的时间,经过了灯就关了。但是可能折返回去关某一个大灯会比继续往下走关接下来的一个小灯更优,
那么可以得到两种状态(沿着当前方向继续往下走,改变方向回去关灯)。
我们需要得到的整个关灯过程中的最优值(最小耗能)
那么要设计的状态转移方程中肯定有两种方案(折返的,不撞墙不回头的)
又因为如果想要关某一区间的灯的过程中耗能最小,所以可以转换成一个个区间来写:
去关某一区间的灯,那么整条街道上除了这一区间的灯会逐渐灭掉其他肯定会全亮。
那么我们把f[i][j]记为当从i到j的灯都熄灭后剩下的灯的总功率。
再进一步:f[i][j][0]表示关掉i到j的灯后,老张站在i端点,f[i][j][1]表示关掉[i][j]的灯后,老张站在右端点
(i为左端点,j为右端点)
又f[i][j][0]会由两种方案推导而来(上面有写。):折返回来关i,j的灯、由i+1深入,继续关第i盏灯从而扩展到(i,j);
所以得到状态转移方程:
f[i][j][0] = min ( f[i+1][j][0] + ( a[i+1] - a[i] ) * ( sum[i] + sum[n] - sum[j] ) ,
f[i+1][j][1] + ( a[j]-a[i] ) * ( sum[i]+sum[n]-sum[<
区间dp _P1220关路灯
最新推荐文章于 2022-08-11 16:47:40 发布