简单入门DP
第 i-1 层的 j 列加上第 i 层的 j 列 j+1 列的大值。
#include <stdio.h> #include <string.h> #define M 102 #define max(a,b) ((a)>(b) ? (a) : (b)) int dp[M][M]; int run(int n) { for(int i=n; i>=2; i--) { for(int j=1; j<i; j++) dp[i-1][j] += max(dp[i][j],dp[i][j+1]); } return dp[1][1]; } int main(int argc, char* argv[]) { #ifdef __MYLOCAL freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1; i<=n; i++) { for(int j=1; j<=i; j++) scanf("%d",&dp[i][j]); } printf("%d ",run(n)); } return 0; }