问题标题: 酷町堂:4400 捡金币

0
0
已解决
黄昊轩
黄昊轩
中级守护
中级守护

4399   走迷宫

题目描述 Description

小P被困在了如下图所示的一个数字三角形迷宫里,每一条路都用一个数字表示。
现规定从最顶层走到最底层,每一步可沿左斜线向下或右斜线向下走。其中规定,假设三角形行数 n≤100,小P必须经过迷宫中的某一条路,使之走的所有路上数字之和最大。
image.png

输入描述 Input Description

n+1行,第一行三个数字n,x,y,分别表示三角形迷宫的行数、必须经过的路的坐标
下面n行,分别代表三角形迷宫每条路上的数字

输出描述 Output Description

一个整数,表示小P所走路径的数字之和最大值

样例输入 Sample Input


 

3 2 2
1
2 3
4 5 6

样例输出 Sample Output


 

10

数据范围及提示 Data Size & Hint

1<=n<=100

黄昊轩在2019-11-24 16:26:24追加了内容

小P路过一个n*n个格子大小的房间,房间的每个格子上都放有一定数量的金币。现在小P在这个房间的左上角,只能向下或向右移动,每次移动一格。每次经过某一个格子都可以捡起格子中的金币。
请你帮小P选择一条到达右下角的路,使得在移动的过程中能够捡到最多的金币。

输入描述 Input Description

第一行:N M ,表示房间是由一个N*M的格子组成
接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的金币数(单个空格隔开)

输出描述 Output Description

输出有一个整数, 表示小P捡到最多的金币数

样例输入 Sample Input


 

3 4
3 1 2 8
5 3 4 6
1 0 2 3

样例输出 Sample Output


 

24

数据范围及提示 Data Size & Hint

1≤N M≤20,0≤Xij≤500


0
已采纳
解宇乐
解宇乐
中级守护
中级守护

这题是数字金字塔,用递推的思路,一下是普通数字金字塔的代码:

 

    for(1~n)
        for(1~i)
            cin>>a[i][j];
    f[1][1]=a[1][1];
    for(2~n)
        for(1~i)
            f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
    int m=0;
    for(1~n)
        m=max(f[n][i],m);
    最后输出m;

我也只能提供到这里了,剩下的自己想吧

0
0
0
0
毛润宇
毛润宇
新手天翼
新手天翼

真的一点思路都没有吗,老师刚布就问?

走迷宫:确定一定走的路线,再从排好序的新三角形里面从大往下遍历找带有这条线路的最大值。

捡金币:这个我真不知道,容我再思考思考。

对了,今天表彰大会8年级是有你吧,方正通达之星。

毛润宇在2019-11-26 18:50:35追加了内容

这好像不是动态规划吧

我要回答