数塔 (dp)HDU

来源:互联网 发布:vb picturebox 保存 编辑:程序博客网 时间:2024/06/03 04:47

题目大意:有一个塔,现在求从塔顶走到底层经过的数字节点之和最大值

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

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; } 



0 0
原创粉丝点击