P9506 题解
blog。First solution /kx。
容易想到断环成链。然后 \(dp_i\) 表示到第 \(i\) 个位置所获的最多钱数。再维护 \(dp_{1\le j<i}\) 的最大值 \(mx_i\)。
对于当前位置,要么用 \(dp_{i-1}\)(已经买过了 \(i-1\) 所需买的课本)转移,要么用 \(mx_{i-1}\)(没买过 \(i-1\))转移,实现方面前缀和即可,这个不难。
然后写一发交 loj,发现能获得 \(40\) 左右的高分。这是因为你断环成链了,如果你第 \(1\) 个位置选了,那么在整个数组最后几个位置,你要买的教材就会循环回去 \(1\) 那里,但他们其实被买过了。
所以分类一下第一个位置选不选,然后跑两次 DP 即可。
code,时间复杂度 \(O(n)\)。