云中烛火

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数字三角形

  (图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 }

 

 

posted on 2013-05-03 09:39  云中烛火  阅读(181)  评论(0)    收藏  举报