这是哪道题来着?
#include<bits/stdc++.h>
using namespace std;
const int NN = 1004;
int A[NN][NN], D[NN][NN], N;
int dp(int i,int j) {
int &d = D[i][j];
if (d >= 0) return d;
if (i == N) return d = A[i][j];
assert(i<N);
return d=A[i][j]+max(dp(i+1,j),dp(i+1,j+1));
}
int main() {
ios::sync_with_stdio(false),cin.tie(0);
cin>>N;
memset(D,-1,sizeof(D));
for(int i=1; i<=N; i++)
for(int j=1;j<=i;++j)cin>>A[i][j];
printf("%d\n",dp(1,1));
return 0;
}