P1216數字三角形 Number Triangles
阿新 • • 發佈:2020-11-18
菜題 P1216數字三角形 Number Triangles
簡介
很簡單的一道dp練手題,,,
他不是簡不簡單的問題,
他真的是那種,很少見的那種
題目(from 洛谷)
題目描述
觀察下面的數字金字塔。
寫一個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
上思路
** 顯 然 **
狀態轉移:
f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]
f即為到達i j格用最短長度 a即為每格子中數值
注意遞推的順序
上程式碼
#include <bits/stdc++.h> #define N 1010 using namespace std; int a[N][N],f[N][N],x; int main(){ cin>>x; for(int i=1;i<=x;i++) for(int j=1;j<=i;j++) cin>>a[i][j]; for(int i=x;i>=1;i--){ for(int j=i;j>=1;j--){ f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]; } } cout<<f[1][1]<<endl; return 0; }