数字三角形
(图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路
径,使该路径所经过的数字的总和最大。
●每一步可沿左斜线向下或右斜线向下走;
●1<三角形行数≤100;
●三角形中的数字为整数0,1,…99;
输入数据:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出数据:
30
1 #include<stdio.h> 2 #include<stdlib.h> 3 int a[100][100],b[100][100],c[100][100]; 4 int i,j,n; 5 6 void print(int i,int j){ 7 if((i==n)||(j==n)){ 8 printf("->(%d,%d)\n",i,j); 9 exit(0); 10 } 11 printf("->(%d,%d)\n",i,j); 12 print(i+1,b[i][j]); 13 } 14 15 int main(){ 16 scanf("%d",&n); 17 for(i=1;i<=n;i++){ 18 for(j=1;j<=i;j++){ 19 scanf("%d",&c[i][j]); 20 } 21 } 22 23 for(i=1;i<=n;i++){ 24 a[n][i]=c[n][i]; 25 b[n][i]=0; 26 } 27 28 for(i=n-1;i>0;i--){ 29 for(j=1;j<=i;j++){ 30 31 if(a[i+1][j]>a[i+1][j+1]){ 32 a[i][j]=a[i+1][j]+c[i][j]; 33 b[i][j]=j; 34 } 35 36 else { 37 a[i][j]=a[i+1][j+1]+c[i][j]; 38 b[i][j]=j+1; 39 } 40 } 41 } 42 43 printf("%d\n",a[1][1]); 44 print(1,1); 45 return 0; 46 }
浙公网安备 33010602011771号