————————————————————————————————————————————————————
直接放AC代码,主要想回忆记录一下DP算法的求解过程
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int dp[110][110]; int main() { int t,i,j,n; int maxn; cin>>t; while(t--) { cin>>n; for(i=0;i<n;i++) for(j=0;j<=i;j++) cin>>dp[i][j]; //输入数塔 for(i=1;i<n;i++) { dp[i][0]+=dp[i-1][0]; dp[i][i]+=dp[i-1][i-1]; } for(i=2;i<n;i++) { for(j=1;j<i;j++) dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]); } for(maxn=-1,j=0;j<n;j++) maxn=max(maxn,dp[n-1][j]); cout<<maxn<<endl; } return 0; }