数塔(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]

浙公网安备 33010602011771号