新数字三角形问题

新数字三角形问题

Time Limit: 1000MS Memory limit: 65536K

题目描述

给定一个由n(<=100)行数字组成的数字三角形如下所示。设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
7

3 8

8 1 0

2 7 4 1

4 5 2 6 1

对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值,并输出这个路径的完整坐标。

输入

多组输入
每组数据第一行输入一个n。
接下来的n行,对于第 i(1 --> n) 行每行有 i 个不超过200的正整数
保证对于这n行数据,每行的数字不会重复,如果在某一行的最大值相同了,优先输出靠近左边(j较小)的坐标。

输出

 对于每组数据输入一个最大值,占一行。
接下来的n行,每行两个整数,代表你得到这个最大值所走的路径坐标。

示例输入

5
3  8
8 1 0
2 7 4 1
4 5 2 6 1

示例输出

30
5 2
4 2
3 1
2 1
1 1

提示


相信大家都做过数字三角形,今天我要在此基础上做一个相似的新数字三角形

主要思想和数字三角形相似:

首先也要从上到下存数字的和,这里有一个地方不一样,他要求输出顺序,那咱们就从上至下比较那个大就是谁。。

  1. #include <stdio.h>   
  2. #include <string.h>   
  3. #include <stdlib.h>   
  4. int a[1002][1002];   
  5. int max(int n,int m)   
  6. {   
  7.     return n>m?n:m;   
  8. }   
  9. int b[1002];   
  10. int c[1002];   
  11. int main()   
  12. {   
  13.     int n,m,i,j;   
  14.     while(~scanf("%d",&n))   
  15.     {   
  16.         for(i = 1;i <= n; i++)   
  17.         {   
  18.             for(j = 1;j <=i ;j++)   
  19.             {   
  20.                 scanf("%d",&a[i][j]);   
  21.             }   
  22.         }   
  23.         for(i = n;i > 1; i--)   
  24.         {   
  25.             for(j = 1;j < i; j++)   
  26.             {   
  27.                 a[i-1][j] = a[i-1][j]+max(a[i][j],a[i][j+1]);   
  28.             }   
  29.         }   
  30.         b[0] = 1;   
  31.         c[0] = 1;   
  32.         j = 1;   
  33.         int k = 1;   
  34.         for(i = 2;i <= n; i++)   
  35.         {   
  36.             if(a[i][j]>a[i][j+1])   
  37.             {   
  38.                 b[k] = i;   
  39.                 c[k] = j;   
  40.                 k++;   
  41.             }   
  42.             else  
  43.             {   
  44.                 b[k] = i;   
  45.                 c[k] = j+1;   
  46.                 j = j+1;   
  47.                 k++;   
  48.             }   
  49.         }   
  50.         printf("%d\n",a[1][1]);   
  51.         for(i = n-1;i >= 0; i--)   
  52.         {   
  53.             printf("%d %d\n",b[i],c[i]);   
  54.         }   
  55.     }   
  56. }   

代码菜鸟,如有错误,请多包涵!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值