1 条题解
-
0limingyang LV 10 MOD @ 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