Problem 1 恐狼后卫(wolf.cpp/c/pas)

【题目描述】

著名卡牌游戏《石炉传说》中有一张随从牌:恐狼后卫。恐狼后卫的能力是使得相邻随从的攻击力提高。

现在有n张恐狼后卫顺序排成一排,第i只恐狼后卫的攻击力为a[i],血量为h[i],提升相邻随从的攻击力值为b[i]。

你的攻击力为atk,每次攻击你可以选择一只存活的恐狼后卫,减少其血量值atk。若其血量小于等于0,则该恐狼后卫死亡。当某只恐狼后卫死亡时,其左右两侧(若存在)的恐狼后卫会靠拢并成为相邻关系。

在攻击第i只恐狼后卫时,除了要承受这只恐狼后卫自身的攻击力a[i]之外,还要承受与其相邻的2张恐狼后卫的提高攻击力值b[i-1]和b[i+1](若存在)。

你的任务是承受最少的总伤害杀死所有恐狼后卫,输出需承受的伤害值。

【输入格式】

第一行一个正整数n,表示恐狼后卫的数量。

第二行一个正整数atk,表示你的攻击力。

以下n行,每行3个值:a[i]、b[i]、h[i],分别表示第i只恐狼后卫自身的攻击力值、提升相邻随从的攻击力值、血量值。

【输出格式】

一个整数,表示杀死所有恐狼后卫需要承受的最少伤害值。

【样例输入】

3

1

8
1 6

3
5 7

4
9 2

【样例输出】

94

【数据范围】

对于30%的数据,n
<= 10

对于另外30%的数据,n
<= 100, h[i] = 1

对于100%的数据,n
<= 400,atk、a[i]、b[i]、h[i]
<= 1000

很简单,区间动规嘛,我这样的juruo都现场ac了。设状态f[i][j]代表开区间(i,j)内的东东被全部杀掉的代价。

转移方程为f[i][j]=min{f[i][k]+f[k][j]+attack[k]+improvement[i]+improvement[j]}

省选培训第二次模拟赛rank20+,果然我还是太弱

05-06 11:27