1、HDU-2084 数塔
2、链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084
3、总结:从下往上推,最后归于顶点。方程为 dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+a[i][j]
#include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio> using namespace std; #define LL long long #define INF 0x3f3f3f3f int main() { int c,dp[110][110],a[110][110],n; scanf("%d",&c); while(c--) { 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=0;i<n+1;i++){ dp[n][i]=0; } for(int i=n-1;i>=0;i--) for(int j=0;j<=i;j++) { dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j]; } printf("%d ",dp[0][0]); } return 0; }