1 条题解

  • 0
    @ 2020-07-28 10:32:10

    DP其实就是加乘原理
    可以看出,数塔问题就是从下往上推,推出每个点向下走到的最大值,最后在推出的表中看顶点就ok。
    那么,我们要怎么推呢?
    01穷举之所以时间效率低下,是因为一个点会被访问多次。要每个点访问一次,我们得在每个点下寻找下面两个点哪个走下去值更大,之所以从下往上,是因为上面看起来的两个点不能代表其下所有的,而倒数第二层的就是所有的(一个),然后倒数第3层也能代表其下所有的……这样推上去就可以了。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int a[n+1][n+1];
        for (int i=1; i<=n; i++)
            for (int j=1; j<=i; j++) cin >> a[i][j];
        for (int i=n-1; i>=1; i--)
            for (int j=1; j<=i; j++)
            {
                if (a[i+1][j]>=a[i+1][j+1]) a[i][j]+=a[i+1][j];
                else a[i][j]+=a[i+1][j+1];
            }
        cout << a[1][1] << endl;
        return 0;
    }
    
  • 1

信息

ID
1003
难度
3
分类
动态规划 点击显示
标签
递交数
26
已通过
16
通过率
62%
被复制
1
上传者