数塔求最长路径
#include<stdio.h>
#define Max(a,b) ((a>b)?a:b) //坑,这地方一定得括起来
int a[1005][1005]; //输入的数据
int b[1005][1005];
int main(){
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
scanf("%d",&a[i][j]);
}
}
for(j=0;j<n;j++){
b[n-1][j]=a[n-1][j];
}
for(i=n-2;i>=0;i--){
for(j=0;j<=i;j++){
b[i][j]=a[i][j]+Max(b[i+1][j],b[i+1][j+1]);
}
}
printf("最大路径值:%d\n",b[0][0]);
printf("最大路径为:%d",a[0][0]);
int a_temp=a[0][0],b_temp=b[0][0];
int ti=0,tj=0;
for(i=1;i<n;i++){
ti=i;
b_temp-=a_temp;
if(b_temp==b[ti][tj]){
printf(" %d",a[ti][tj]);
a_temp=a[ti][tj];
}
else if(b_temp==b[ti][tj+1]){
printf(" %d",a[ti][tj+1]);
a_temp=a[ti][tj+1];
tj=tj+1;
}
}
return 0;
}