AtCoder Beginner Contest 288

E. Wish List

假设你需要选择 \(B_1,B_2,..,B_k\)\(K\) 个元素编号。

假设当前你选择 \(B_i\) 元素,且前面 \(i-1\) 个元素 \(B_1,B_2,...,B_{i-1}\) 选择了 \(x\) 个(\(0\leq x\leq i-1\)),那么选择代价就为 \(A_{B_i}+C_{B_i-x}\)

那么对于 \(x\)\(0\)\(i-1\) 的最优代价就为:\(A_{B_i}+cost(B_i,i-1)\)。其中 \(cost(i,j)=\min\{C_{i-j},C_{i-j+1},...,C_i\}\)

则总代价为 \(\sum ^{k}_{i=1}(A_{B_i}+cost(B_i,i-1))\)

但是现在的问题是你并不知道你需要选择哪些数(你还可以选择 X 数组外其他的数),则需要 dp 进行解决。

定义 \(dp_{i,j}\) 表示前 \(i\) 个数买了 \(j\) 件商品的最小代价。

如果选择第 \(i\) 个数(什么时候都能选),\(dp_{i,j}=\max\{dp_{i,j},dp_{i-1,j-1}+A_i+cost(i,j-1)\}\)
如果不选择第 \(i\) 个数(X 数组没要求选才能选),\(dp_{i,j}=\max\{dp_{i,j},dp_{i-1,j}\}\)

最后求答案,输出 \(\max\{dp_{n,i}\}(m\leq i \leq n)\)

参考代码:code

posted @ 2023-02-11 14:18  Otue  阅读(19)  评论(0编辑  收藏  举报