题目链接
C++ version
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int a[N][N],n,dp[N][N],ans;
int main(){
cin>>n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= i;j++){
cin>>a[i][j];
dp[i][j] = a[i][j];
if(j-1 >= 1)dp[i][j] = max(dp[i][j],a[i][j]+dp[i-1][j-1]);
if(j <= i-1)dp[i][j] = max(dp[i][j],a[i][j]+dp[i-1][j]);
}
}
for(int i = 1;i <= n;i++)
ans = max(ans,dp[n][i]);
cout<<ans;
return 0;
}
Python version
N = 1005
a = []
dp = []
n = int(input())
for i in range(0,n):
l1 = list(map(int,input().split()))
l2 = l1.copy()
a.append(l1)
dp.append(l2)
for j in range(0,i+1):
if j-1 >= 0:
dp[i][j] = max(dp[i][j],dp[i-1][j-1] + a[i][j])
if j <= i-1:
dp[i][j] = max(dp[i][j],dp[i-1][j] + a[i][j])
ans = 0
for i in range(0,n):
ans = max(ans,dp[n-1][i])
print(ans)
这里python有一个比较坑的点,当我将l1直接append to dp array 时将会导致对l1的原地改动,简单来说就是更新dp数组的同时会更新a数组,故dp.append(l1.copy())是有必要的