4053 酒馆
2023-08-09 20:33:39 # OI # Problem

题面

内容

你经营着 nn 家酒馆,第 ii 家酒馆可以花费 ci,j(0jk)c_{i, j}(0 \le j \le k) 元将这家酒馆的档次设置为 jj

mm 个人,每个人会在区间 [li,ri][l_i, r_i] 种选择一家档次最高的酒馆消费 jj 元(jj 是这家酒馆的档次),求合理设置最大每个酒馆的档次,使得收益最大化。

输入

输入第一行三个整数 n,m,kn, m, k

接下来 nn 行,每行 kk 个整数,第 ii 行第 jj 个数表示将酒馆 ii 档次设置为 jj 的花费,特别地,有 ci,0=0c_{i, 0} = 0,但不会在输入数据中。

接下来 mm 行,第 ii 行两个整数 li,ril_i, r_i,表示第 ii 个人选择的酒馆区间。

输出

输出一行一个整数,表示最大收益。

样例1

输入

4 5 3
2 4 5
3 4 5
2 2 4
1 2 3
3 3
2 2
2 3
2 4
1 2

输出

7

思路

类似地,每个人会去能去的档次最高的店,定义fi,jf_{i,j}为只考虑[i,j][i,j]这个区间里的人所能得到的最大收益是什么,枚举标准最高的店kk,定义gk,tg_{k,t}为有tt人到第kk家店,tt为能到达kk的人数,那么fi,j=fi,k1+fk+1,j+gk,tf_{i,j}=f_{i,k-1}+f_{k+1,j}+g_{k,t}

gg表示合理选择第kk家店的档次使得收益最大的收益。

t=Si,jSi,k1Sk+1,jt=S_{i,j}-S_{i,k-1}-S_{k+1,j}

接下来就是求出所有的gk,tg_{k,t},用cic_i表示ii的花费,hjh_j代表有jj个人来的最高收益,也就是gk,jg_{k,j}

hj=max(i×jci)h_j=max(i\times{j}-c_i)

i1<i2i_1<i_2

i1jci1i_1*j-c_{i_1}

i2jci2i_2*j-c_{i_2}

2比1优的时候,往后2都会比1优,由于2的斜率比1斜率大,交点之后2更优

假如i1×j1c1i2×j2c2i_1\times{j_1}-c_1\ge{i_2\times{j_2}-c_2}

这样处理完之后函数的斜率是单调递增的,

往后优解不一定是连续的,优先选斜率大的。

所以维护的是所有可能成为最优解的斜线,被覆盖的没必要维护(覆盖可以通过函数图像的交点位置来判断),维护可以用单调栈。

最后处理出来就是一个永远最优的分段函数。