题目链接:Problem - 2084 (hdu.edu.cn)
题目:
题目样例:
题目思路:
因为每次都是只能走相邻的结点,所以将输入的下标定位1到n。dp数组每次都是取i-1层的第i-1和第i个。因为求的是最大值,所有可以推出每次的dp数组的值为:
dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i-1][j]+a[i][j]);
AC:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=105;
int t,n;
int a[N][N];
int dp[N][N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i-1][j]+a[i][j]);
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(dp[n][i],ans);
}
cout<<ans<<endl;
}
return 0;
}