dp,动态规划,一开始都不知道这是什么题目,尴尬,但是能做就行了
从最低端的小三角形开始考虑,最底层相邻两个数看作是与上面的数联合成一条小路,选择大的那个数,这样就可以淘汰一条小路线。每次都能淘汰剩下一半的路线,那一直做下去就可以找出最大的那条路线
#include<iostream>
using namespace std;
int max(int x,int y){
if(x>y)
return x;
else
return y;
}
int main(){
int m,n;
int a[101][101];
int sum[101][101]={0};
scanf("%d",&m);
while(m--){
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<i+1;j++)
cin>>a[i][j];
for(int j=0;j<n;j++)
sum[n-1][j]=a[n-1][j];
for(int i=n-1;i>1;i--){
for(int j=0;j<i;j++){
int x=sum[i][j];
int y=sum[i][j+1];
sum[i-1][j]=a[i-1][j]+max(x,y);
}
}
printf("%d\n",a[0][0]+max(sum[1][0],sum[1][1]));
}
return 0;
}