【P8179】【EZEC-11】Tyres(背包问题,决策单调性,分治)

这道题的题面很像,但是做法不同。

题面:

\(n\) 家商店,第 \(i\) 家商店一共可以卖出 \(m_i\) 件商品,其中第 \(j\) 件商品购买所需的代价为 \(a_{i,j}\)。特别地,对于第 \(i\) 家商店,如果想要购买该家商店的商品,需要出 \(a_{i,0}\) 的入场费。

求出购买 \(m\) 件商品所需的最小总代价。

\(n\leq500\)\(m\leq 2\times 10^5\)\(t\leq 500\)\(1\leq a_{i,1}<a_{i,2}<\cdots<a_{i,m_i}\)。其中 \(t=\max_i a_{i,0}\)

题解:

先把 \(a_{i,0}\) 加在第一个商品上。

对于商店 \(i\),其第 \(t\) 个商品之后的任意商品的价格一定比前 \(t\) 个商品中任意商品的价格都高。

那么考虑将所有商品分为两部分:第一部分是每家商店的前 \(t\) 个商品,第二部分是剩下的商品。

\(f_a\) 表示第一部分选 \(a\) 个商品的最小代价,\(g_b\) 表示第二部分选 \(b\) 个商品的最小代价。注意到,\(\min_a f_a+g_{m-a}\) 就是答案。(如果一个商店买了第 \(t\) 个商品之后的商品但是没付入场费,那么把这些商品替换成该商店的对应长度前缀的商品肯定不劣)

对于 \(f_a\),可以考虑使用决策单调性优化 DP 做到 \(O(n^2t\log nt)\)(注意商品数范围是 \(O(nt)\) 的)。对于 \(g_b\) 显然贪心地选,可以 \(O(m\log n)\) 求出。

posted @ 2022-10-29 11:24  ez_lcw  阅读(9)  评论(0编辑  收藏  举报