方法一:
图的遍历
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int path(int a[1000][2000],int x,int y,int n){
int len=a[x][y];
if(x<n){
int len1=len+path(a,x+1,y-1,n);
int len2=len+path(a,x+1,y+1,n);
return len1>len2?len1:len2;
}
else
return 0;
}
int main(){
int t,r,k,len;
int a[1000][2000];
cin>>t;
while(t--){
cin>>r;
for(int i=0;i<r;i++){
k=r-i;
for(int j=0;j<=i;j++){
cin>>a[i][k];
k+=2;
}
}
// for(int i=0;i<r;i++){
// for(int j=0;j<20;j++){
// cout<<a[i][j]<<' ';
// }
// cout<<endl;
// }
len=path(a,0,r,r);
cout<<len<<endl;
}
return 0;
}
方法二:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
int a[20][20];
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
cin>>a[i][j];
}
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<=n-i;j++){
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
}
}
cout<<a[0][0]<<endl;
}
return 0;
}
//7
//3 8
//8 1 0
//2 7 4 4
//4 5 2 6 5