免费馅饼•SERKOI最新推出了一种叫做“免费馅饼”的游戏
•游戏在一个舞台上进行
舞台的宽度为W格,天幕的高度为H格,游戏者占一格
开始时,游戏者站在舞台的正中央,手里拿着一个托盘
•游戏开始后,从舞台天幕顶端的格子中不断出现馅饼并垂直下落
游戏者左右移动去接馅饼
游戏者每秒可以向左或右移动一格或两格,也可以站在愿地不动
•馅饼有很多种,游戏者事先根据自己的口味,对各种馅饼依次打了分
同时在8-308电脑的遥控下,各种馅饼下落的速度也是不一样的,下落速度以格/秒为单位
当馅饼在某一秒末恰好到达游戏者所在的格子中,游戏者就收集到了这块馅饼
•写一个程序,帮助我们的游戏者收集馅饼,使得收集的馅饼的分数之和最大
免费馅饼•输入数据:输入文件的第一行是用空格分开的两个正整数,分别给出了舞台的宽度W(1~99之间的奇数)和高度H(1~100之间的整数)
•接下来依馅饼的初始下落时间顺序给出了一块馅饼信息
由四个正整数组成,分别表示了馅饼的初始下落时刻(0~1000秒),水平位置、下落速度(1~100)以及分值
游戏开始时刻为0
从1开始自左向右依次对水平方向的每格编号
•输出数据:输出文件的第一行给出了一个正整数,表示你的程序所收集到的最大分数之和
分析•我们将问题中的馅饼信息用一个表格存储
表格的第I行第J列表示的是游戏者在第I秒到达第J列所能取得的分值
那么问题便变成了一个类似数字三角形的问题:从表格的第一行开始往下走,每次只能向左或右移动一格或两格,或不移动走到下一行
怎样走才能得到最大的分值
•因此,我们很容易想到用动态规划求解
•F[I,J]表示游戏进行到第I秒,这时游戏者站在第J列时所能得到的最大分值
那么动态转移方程为:F[I,J]=Max{F[I-1,K]}+馅饼的分值(J-2