植物大战僵尸
费用提前计算,一个很重要的思想就是考虑如何分摊费用到每个单元上,然后直接计算每个单元对全局费用的贡献
这道题目可以知道,比较特殊的是蓝草和绿草(所以下面就先考虑这两种草而忽略红草)
对于蓝草,我们种在某一格,他对全局造成的影响是什么?他既会使前面(定义为从入口那端开始数)的绿草的中毒的伤害增加也会使后面的绿草的中毒的伤害增加,我们要考虑怎么一次性计算这个影响
对于绿草,我们种在某一格,他对全局造成的影响是什么?他的中毒时间既会因为前面的,也会因为后面的蓝草而增加
我们可以分别给两个草分配一下,由于DP是从前面往后面DP,所以我们认为蓝草的影响考虑前面的绿草,绿草的影响考虑前面的蓝草(这样上面说的前面和后面的问题就直接解决了,因为上文说的前面后面的问题,比如绿草考虑后面的蓝草就相当于蓝草考虑前面的绿草,这样就能解决了)
于是有
红草怎么办?
当然如果我们没有想到这个贪心,我们直接设\(f[i][j][k]\)表示前\(i\)个格子,有\(j\)个蓝草和\(k\)个绿草的最大伤害感觉也是可以的
这道题目是POJ3042,可以尝试一下
update 2024.6.30
其实这道题目根本不是费用提前计算,费用提前计算是要考虑全局的影响的(i.e.,不能只考虑当前状态的费用,还要考虑除了当前状态之外产生的费用)