数塔(HDOJ2084)

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084

解题思路:从下向上计算

手工模拟样例:i代表行j代表列,arr【】用来存储第i行第j列位置自下而上的最大和

            1    2    3     4    5

第一行    7                                    arr【1】【1】=7+23=30         ---------------->arr[1][1]处为最大和

第二行    3    8                              arr【2】【1】=3+20=23,arr【2】【2】=8+13=21

第三行    8    1    0                        arr【3】【1】=8+12=20(12是经过和7的比较得到大的一个),arr【3】【2】=1+12=13,arr【3】【3】=0+10=10

第四行    2    7    4    4                 从第四行开始计算arr【4】【1】=2+5=7 ,arr【4】【2】=7+5=12,arr【4】【3】=4+6=10,arr【4】【4】=4+6=10

第五行    4    5    2    6    5

代码:

#include<stdio.h>
int arr[101][101];
int max(int a,int b)
{
  return a>b?a:b;
}
int main()
{
    int count,height;
    scanf("%d",&count);
    while(count--)
    {
      scanf("%d",&height);
      for(int i=1;i<=height;i++)
          for(int j=1;j<=i;j++)
              scanf("%d",&arr[i][j]);
      for(int i=height-1;i>0;i--)
          for(int j=1;j<=i;j++)
            arr[i][j]+=max(arr[i+1][j],arr[i+1][j+1]);
         
      printf("%d\n",arr[1][1]);
    }
}

[ Copy to Clipboard ]    [ Save to File]

 

posted @ 2013-04-10 23:59  supersnow0622  Views(138)  Comments(0)    收藏  举报