数字金字塔
题解:
#include<iostream> #include<cstring> using namespace std; int max(int a,int b) { return a>b?a:b; } int s[1001][1001]={0}; int dp[1001][1001]; int n; int dfs(int cr,int d) { if(dp[d][cr]>-1) return dp[d][cr]; if(d==n){return dp[d][cr]=s[d][cr];} else { return dp[d][cr]=s[d][cr]+max(dfs(cr,d+1),dfs(cr+1,d+1)); } } int main() { cin>>n; memset(dp,-1,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) cin>>s[i][j]; } cout<<dfs(1,1); return 0; }