您的位置:首页 > 其它

数塔 (dp)HDU - 2084

2017-05-06 22:47 447 查看
题目大意:有一个塔,现在求从塔顶走到底层经过的数字节点之和最大值

思路:先计算第二层的每一个最大有多大,然后根据第二层的计算第三层的,循环直到求出最后一层(不过代码是从最后一层到第一层,都一样

z[i][j]=max(z[i][j]+z[i+1][j],z[i][j]+z[i+1][j+1])就可以了

#include<stdio.h>
#include<string.h>
int max(int a,int b){
if(a>b) return a;
return b;
}
int main(void)
{
int z[105][105];
int num;
scanf("%d",&num);
while(num--){
int n;
scanf("%d",&n);
int i,j;
memset(z,0,sizeof(z));
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i>=j) scanf("%d",&z[i][j]);
}
}
for(i=n-2;i>=0;i--){
for(j=0;j<n;j++){
z[i][j]=max(z[i][j]+z[i+1][j],z[i][j]+z[i+1][j+1]);//变换
}
}
printf("%d\n",z[0][0]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: