洛谷 P1728 高手玩电竞
题目
题目背景
高手在一年级、找不到可以怎么样来鄙视小盆友以获得女神的欢心,于是他决定玩电竞来藐视那些连开机都不知道要按哪里的小盆友。他玩的游戏叫“minecraft”,其中一个核心的内容是给技能加点(minecraft要加点?),他找到你,并答应如果自己追到了女神,他就请你去他家吃饭,油炸苹果、香辣梨子、水煮活鸟什么的随你选。他想要技能达到最大威力值。
题目描述
这是一个技能树(或者科技树).格子上的数,是威力值.要先学会第一排第二个和第三个,才能学会第二排的第二个.每个技能学习的前提都是左上和右上的两个技能.假设现在有一个第一层有N个技能的技能树,而且技能点是有限的,只能学习M个技能,我们想知道最大的威力值之和是多少.
输入输出格式
输入格式:
第一行两个数N和M,如题所述
之后N行,第i行,有n+1-i个数.表示一个技能树.
输出格式:
输出一个数,表示最大威力值之和
输入输出样例
输入样例#1:
4 5
1 1 1 1
1 2 1
1 1
1
输出样例#1:
6
说明
对于40%的数据,N<=10
对于100%的数据,N<=50,M<=500,所有数据都在longint之内.
题解
首先,把三角形倒过来看
1 2 3 4 4
2 3 4 3 4
3 4 ==> 2 3 4 (这里的数字是表示状态类型)
4 1 2 3 4
很显然,我们在取左边的某个状态类型 i 的数字时候,该数下方的数以及右边一列中与它状态类型相同的那个数字也一定被取过
而右边的那个数在三角形中的位置就是当前所要取得数字的位置向下移一格后再向右左移一格
那么,我们只要从右往左枚举列
f[i][j][k]
表示第
i
列,从下往上取
转移方程: