问题标题: 酷町堂:4952 亢奋的牛牪犇

0
0
已解决
李显晨
李显晨
中级启示者
中级启示者

求递推关系与边界啊!!!

由于本人豆不够了,所以本帖只发十个豆

https://ke.codingtang.com/#/problem/problemSub?id=4952

李显晨在2021-03-23 17:44:36追加了内容

ding

我可以加到50豆

李显晨在2021-03-23 18:01:01追加了内容

ding

李显晨在2021-03-23 18:12:50追加了内容

ding

李显晨在2021-03-23 18:39:25追加了内容

ding

李显晨在2021-03-23 19:04:55追加了内容

ding

李显晨在2021-03-23 19:59:57追加了内容

ding

李显晨在2021-03-23 20:21:55追加了内容

ding


0
0
陈正朔
陈正朔
初级光能
初级光能

因为数据的出发点都是最后一行的中间位置的下方,所以在处理边界时要把f数组最后一行除中间数外的数都置为无穷小,防止选的出发点不是最后一行的中间位置的下方

边界处理

if(i!=n/2+1){
            f[m+1][i]=-0x3f3f3f3f;
}

递推中有两个边界,一个是j==n,一个是j==1

在处理时将i从m~1遍历,j从1~n遍历

核心递推式

f[i][j]=max(max(f[i+1][j],f[i+1][j+1]),f[i+1][j-1])+a[i][j];

两个边界的递推式你自己想

0
张恩泽
张恩泽
高级天翼
高级天翼

这题的最左边和最右边只能用两个状态推:

最左边:

f[i][j] = max(f[i - 1][j], f[i - 1][j + 1]) + map[i][j];

最右边:

f[i][j] = max(f[i - 1][j], f[i - 1][j - 1]) + map[i][j];

否则:

f[i][j] = max(f[i - 1][j - 1], max(f[i - 1][j], f[i - 1][j + 1])) + map[i][j];

最后输出

f[m + 1][n / 2 + 1]

即可

PS:这题我好像没有写边界,但还是过了

0
我要回答