csu1022 基础dp(数字三角形)

来源:互联网 发布:淘宝会员管理在哪 编辑:程序博客网 时间:2024/06/03 12:57

这个数字三角形只是比那个入门的数字三角形多了一条路而已,简单的dp

状态 dp[i][j] : 第i行 第j列的最大和。

转移方程  dp[i][j]=max{ dp[i+1][j] , dp[i+1][j+1] , dp[i+1][j+2] } + a[i][j];

以下为代码:

#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;int a[300][300],dp[300][300];int maxx(int aa,int bb ,int cc){    int ret=max(aa,bb);    return max(ret,cc);}int main(){  //  freopen("in.txt","r",stdin);    int T;    scanf("%d",&T);    while(T--){        memset(a,0,sizeof(a));        memset(dp,0,sizeof(dp));        int n;        scanf("%d",&n);        for(int i=1;i<=n;i++)            for(int j=1;j<=2*i-1;j++)                scanf("%d",&a[i][j]);        for(int i=1;i<=2*n-1;i++) dp[n][i]=a[n][i];        for(int i=n-1;i>0;i--)            for(int j=1;j<=2*i-1;j++)                dp[i][j]=maxx(dp[i+1][j],dp[i+1][j+1],dp[i+1][j+2])+a[i][j];        printf("%d\n",dp[1][1]);    }    return 0;}


0 0