题目背景
又有新游戏可玩啦!
题目描述
小 T 发现最近市面上出现了一款游戏,这款游戏分为 n 关,第 i 关玩一次需要 si 个体力,最多可以玩 mi 次第 i 关。想玩第 i 关,必须先玩第 i−1 关至少一次,当然,玩第 1 关不需要这个先决条件。
游戏规则是这样的(对于第 i 关):
一共有 ki 个冰淇淋排成一排,第 j 个冰淇淋的美味度为 yi,j,每次你需要选择一个冰淇淋吃掉,共吃 ki 次,在第 j 次吃第 l 个冰淇淋可以获得 j×yi,l 分。
当然,要想吃冰淇淋可没有那么简单,你需要在第一次吃指定的第 ci 个冰淇淋,接下来每次只能吃已经吃完的段的两边的冰淇淋,比如第一次吃的是第 2 个冰淇淋,第二次可以吃第 1 个或第 3 个(如果有的话)。
因为小 T 的脑子不太够计算这复杂的分数,所以他想求助你,在使用体力不超过 t 的情况下,最多可以获得多少分数。
输入格式
第一行有两个整数 n,t,分别表示关卡数和体力数。
接下来第 2 到第 2×n+1 行,第 2×i 行和第 2×i+1 行描述第 i 关。
第 2×i 行四个整数 si,mi,ki,ci,意义见题面。
第 2×i+1 行 ki 个整数,第 j 个为 yi,j,意义见题面。
输出格式
一行一个整数,为使用体力不超过 t 的情况下的获得的分数的最大值。
提示
【样例解释】
样例1:
最优解为玩一次第一关再玩一次第二关。
第一关按照第 2,3,4,1 个的顺序吃冰淇淋,可以获得 2×1+4×2+1×3+3×4=2+8+3+12=25 的分数。
第二关按照第 3,4,2,1 个的顺序吃冰淇淋,可以获得 2×1+2×2+3×3+2×4=2+4+9+8=23 的分数。
所以最多可以获得 25×1+23×1=48 的分数。
样例2:
最优解为玩两次第一关,一次第二关,一次第三关。
可以获得 10000×2+1×1+2×1=20003 的分数。
【数据范围】
对于 10% 的数据,1≤n≤10,1≤ki,mi,si,yi,j≤100,1≤t≤100。
对于另外 40% 的数据,1≤n≤100,1≤ki,mi,si,yi,j≤100,1≤t≤104。
对于 100% 的数据,1≤n≤200,1≤ki,mi,si,yi,j≤500,1≤t≤105,1≤ci≤ki。
【说明/提示】
【文件读入读出】(模拟,提交代码时不需使用)
- 文件名:
play.cpp
- 读入文件名:
play.in
- 读出文件名:
play.out