查看原题目请点我这里
解题思路
题目已经说了这是动态规划的题,需要注意的地方是可以用滚动数组节省空间,注意是从前面往后面滚动,因为前面的数值一旦确定以后在当前行就不会再使用。
#include<cstdio>
#include<cstring>
int arr[110][110];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int c,n;
scanf("%d",&c);
while(c--){
scanf("%d",&n);
memset(arr,0,sizeof(arr));
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
scanf("%d",&arr[i][j]);
}
}
int dp[110];
memset(dp,0,sizeof(dp));
for(int j=0;j<n;j++){
dp[j]=arr[n-1][j];
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<=i;j++){
dp[j]=max(dp[j],dp[j+1])+arr[i][j];
}
}
printf("%d\n",dp[0]);
}
return 0;
}