AcWing 898. 數字三角形
阿新 • • 發佈:2022-04-06
題目連結
題目思路
這道題我們可以從最底層考慮,若要使當前路徑之和最大,選擇當前的所選值加左上/右上之和最大即可
因為有負數情況,所以要把邊界設定好
題目程式碼
#include <iostream> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int N = 510; int a[N][N], f[N][N]; int n; int main() { cin >> n; for(int i = 1; i <= n; i ++ ) for(int j = 1; j <= i; j ++ ) cin >> a[i][j]; for(int i = 0; i <= n; i ++ ) for(int j = 0; j <= i + 1; j ++ ) f[i][j] = -INF; f[1][1] = a[1][1]; for(int i = 2; i <= n; i ++ ) for(int j = 1; j <= i;j ++ ) f[i][j] = max(f[i - 1][j - 1] + a[i][j], f[i - 1][j] + a[i][j]); int res = -INF; for(int i = 1; i <= n; i ++ ) res = max(res, f[n][i]); cout << res << endl; return 0; }