滴叉题/se/se
直接复制了
有 \(n\) 套轮胎,滴叉需要用这些轮胎跑 \(m\) 圈。使用第 \(i\) 套轮胎跑的第 \(j\) 圈(对每套轮胎单独计数)需要 \(a_i+b_i(j-1)^2\) 秒。滴叉需要进入维修站来更换轮胎,所消耗的时间为 \(t\) 秒。特别地,滴叉使用的 第一套 轮胎不需要进站更换。你需要最小化总时间,总时间等于每圈的时间之和加上进站换轮胎所花费的时间。
数据范围:\(1\leq n,b_i\leq 500\),\(0\leq t\leq 500\),\(1\leq m\leq 2 \times 10^5\),\(1\leq a_i\leq 10^9\)。
首先找点结论,显然只会选择某些轮胎,依次用它们跑连续若干圈以后换掉。如果忽略掉第一次使用轮胎的代价 \(t\),那么这个东西是一个凸函数,一堆凸函数的 Max-Plus 卷积,直接搞个堆就做到 \(m\log n\)。可是由于第一次的代价 \(t\) 存在,所以并不满足凸性。怎么办呢?注意到 \(k\) 很小,而代价的增量是一个二次函数。所以当一套轮胎选择了超过 \(\sqrt{t}\) 圈时,它的代价一定大于前面所有的代价,并且满足凸性。那么你可以先强制所有轮胎选不超过 \(\sqrt{t}\) 套,用一个 DP解决,时间复杂度 \(\Theta(n^2t)\)。接下来再用贪心算出每套轮胎至少选择 \(\sqrt{t}\) 套的最优方案,把它们用 Max-Plus 卷积合并。注意到你可能构造出一些不合法的方案,具体地,实际上你必须一套轮胎选满小于 \(\sqrt{t}\) 圈的代价,再去选大于 \(\sqrt{t}\) 的代价。然而这是不要紧的,因为这些方案一定不优,最终答案不会有这种方案。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章