自
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int main(){ int c; cin>>c; while(c--){ int N; cin>>N; int array[105][105],dp[105][105]; int i,j; for(i=1;i<=N;i++) for(j=1;j<=i;j++) cin>>array[i][j]; memset(dp,0,sizeof(dp)); // 初始化dp数组,都赋值为0 for(i=1;i<=N;i++) dp[N][i]=array[N][i]; // 从最底一层开始可得到的值 for(i=N-1;i>=1;i--) for(j=1;j<=i;j++) dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+array[i][j];//递推公式,该位置最大值为该下面一层最大的点加上自己的点 cout<<dp[1][1]<<endl; } return 0; }