很简单的递归,没什么好说的,贴代码,留纪念。
View Code
1 /*{ 2 ID:jzy3209981 3 PROG:numtri 4 LANG:C++ 5 }*/ 6 #include<stdio.h> 7 #include<iostream> 8 #include<string.h> 9 using namespace std; 10 11 int numtriangle[1005][1005]; 12 int result[1005]; 13 int temporary[1005]; 14 15 void start(int n) 16 { 17 int i; 18 if(n==1) 19 { 20 temporary[0]=numtriangle[0][0]; 21 result[0]=numtriangle[0][0]; 22 } 23 else 24 { 25 start(n-1); 26 for(i=0;i<n;i++) 27 { 28 if(i==0) 29 result[i]=temporary[i]+numtriangle[n-1][i]; 30 else if(i==n-1) 31 result[i]=temporary[i-1]+numtriangle[n-1][i]; 32 else 33 result[i]=temporary[i-1]>temporary[i]?temporary[i-1]+numtriangle[n-1][i]:temporary[i]+numtriangle[n-1][i]; 34 } 35 for(i=0;i<n;i++) 36 temporary[i]=result[i]; 37 } 38 return; 39 } 40 int main() 41 { 42 freopen ("numtri.in","r",stdin); 43 freopen ("numtri.out","w",stdout); 44 int n,max=0,i,j; 45 scanf("%d",&n); 46 for(i=0;i<n;i++) 47 for(j=0;j<=i;j++) 48 scanf("%d",&numtriangle[i][j]); 49 memset(result,0,sizeof(result)); 50 memset(temporary,0,sizeof(result)); 51 start(n); 52 for(i=0;i<n;i++) 53 if(result[i]>max) 54 max=result[i]; 55 printf("%d\n",max); 56 return 0; 57 }

浙公网安备 33010602011771号