数塔 (dp)HDU - 2084

xiaoxiao2021-02-28  103

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

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

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

转载请注明原文地址: https://www.6miu.com/read-67217.html

最新回复(0)