loj 1004(dp)

来源:互联网 发布:兔子白网络 编辑:程序博客网 时间:2024/05/21 22:57

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25830‘

思路:类似与数塔问题,自底向上处理,输入的时候稍微注意一下就可以了。

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 222 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8  9 int g[MAXN][MAXN],dp[MAXN][MAXN];10 int n;11 12 int main()13 {14     int _case,t=1;15     scanf("%d",&_case);16     while(_case--){17         scanf("%d",&n);18         FILL(g,0);19         FILL(dp,0);20         for(int i=1;i<=2*n-1;i++)21             for(int j=1;j<=2*n-1;j++){22                 if(i<=n&&j<=i)scanf("%d",&g[i][j]);23                 else if(i>n&&j<=2*n-i)scanf("%d",&g[i][j]);24             }25         dp[2*n-1][1]=g[2*n-1][1];26         for(int i=2*n-2;i>=1;i--)27             for(int j=1;j<=2*n-i;j++){28                 if(i>=n)dp[i][j]=max(dp[i+1][j],dp[i+1][j-1])+g[i][j];29                 else dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+g[i][j];30             }31         printf("Case %d: %d\n",t++,dp[1][1]);32     }33     return 0;34 }
View Code

 

0 0
原创粉丝点击