观察数据范围,发现 nm≤50 这个条件有蹊跷。
根据 m≤n 可得 m≤√50 即 m≤7。
于是考虑状压。
发现这个题跟其他题有点区别。
转移要同时考虑上下两行。
考虑设 fi,j,k 表示转移到前 i−1 行的状态都合法,第 i 行的状态为 j,第 i−1 行的状态为 k 的最小价值。
那么转移就比较显然了。
枚举行数、最近三行的状态,考虑三行中间那行是否合法并转移。
还有一点需要注意,答案的状态为 fn+1,0,x 而非 fn,x,y。
因为根据定义,后者只考虑了 n−1 行的状态。
然鹅题目还要求最小的油库个数,简单地再开一个 g 数组在转移的同时更新即可。
可以预处理 costi,j 表示第 i 行状态为 j 的花费。
代码:
1 |
|