题意:给定一个金字塔,第 i 行有 i 个数,从最上面走下来,只能相邻的层数,问你最大的和。
析:真是水题,学过DP的都会,就不说了。
代码如下:
#include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <set> #include <queue> #include <string> #include <algorithm> #include <vector> #include <map> using namespace std ; typedef long long LL; typedef pair<int, int> P; const int INF = 0x3f3f3f3f; const double inf = 0x3f3f3f3f3f3f3f; const int maxn = 350 + 5; int a[maxn][maxn]; int d[maxn][maxn]; int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; ++i) for(int j = 0; j <= i; ++j) scanf("%d", &a[i][j]); for(int i = n-1; i >= 0; --i){ for(int j = 0; j <= i; ++j) d[i][j] = max(d[i+1][j], d[i+1][j+1]) + a[i][j]; } printf("%d\n", d[0][0]); return 0; }