3910 - 最后的战役
哈利被宣告“死亡”,伏地魔带着他的部下准备进攻霍格沃茨。但是霍格沃茨有古老的魔法保护,他们必须先摧毁这些保护。魔法保护一共有n层,每一层保护有两个参数:k,p。其中k表示魔法的类型,p表示能量的大小。
伏地魔每秒都会穿过一层保护,他在第 i 秒(到达了第 i 层)他有以下选择:
1.收集 [1,i] 层魔法中魔法类型为 x_i 的魔法能量
2.收集 [1,i] 层中魔法能量最大那层的魔法能量
3.使用加倍魔法
对于上面三个选择,他每秒可以可以选择一个,并可能获得能量,对于不同的选择,获得的能量也不同:
对于1.获得[1,i]层中所有魔法类型为x_i的魔法能量(请结合样例1理解)
对于2.获得[1,i]中魔法能量最大的那一层的魔法能量
对于3.这一秒总共收集的能量不变(也就是这一秒不收集新的能量),但是下一秒获得的能量翻倍。但是他不能连续使用加倍魔法,而且他最多只能使用m次,对于每一层的能量他都可以重复获取
只有他通过了这n层保护,并获得了最大的魔法能量才有可能彻底摧毁霍格沃茨的魔法防御,可是巫师又是不擅长计算的。
于是,伏地魔找到了你,而你,作为精通计算机技术的麻瓜程序员,现在需要做的就是设计一个程序帮助伏地魔计算出他可以获得的最大的魔法能量的值。
最终的决战已经展开,魔法界的历史又翻过了一页……
输入
第一行:两个数:n,m,意义见题目描述
接下来n行,第i+1行表示k_i,p_i,意义见题目描述
最后一行,共n个数,第i个数表示x_i,意义见题目描述
输出
一个数,表示伏地魔可以获得的最大能量值
样例
输入
4 1 1 2 2 3 1 2 3 8 3 2 1 3
输出
21
输入
8 3 1 2 2 5 3 2 2 3 1 4 1 6 2 2 3 3 1 3 2 1 4 5 2 1
输出
57
输入
10 3 9 9 8 8 5 7 6 6 5 5 5 5 3 3 2 2 1 1 9 9 1 2 3 5 5 5 6 7 8 9
输出
124
提示
样例一解释:
第一秒最多可以获得2经验值,第二秒最多可以获得3经验值,因为第三秒可以收集魔法类型为1的能量,所以最多可以获得4能量值,第四秒最多可以获得8经验值,所以选择在第三秒使用加倍魔法,共可以获得:2+3+0+2*8=21能量值
数据范围:
100%数据满足:n<=5\times 10^4,m<=500,0 < p_i <= 10^4,0 < k_i <= 10^9,0 < x_i <=10^9
来源
luogu