首页 > 其他 > 详细

Light OJ 1004 - Monkey Banana Problem---- dp题解

时间:2016-08-03 10:15:01      阅读:222      评论:0      收藏:0      [点我收藏+]

技术分享

Sample Input

2

4

7

6 4

2 5 10

9 8 12 2

2 12 7

8 2

10

2

1

2 3

1

Sample Output

Case 1: 63

Case 2: 5


#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<cmath> using namespace std; #define INF 0x3f3f3f3f #define maxn 210 long long f[maxn]; int dp[maxn][maxn]; int Map[maxn][maxn]; int main() { int t,n; scanf("%d",&t); int k = 1; while(t--) { scanf("%d",&n); memset(dp,0,sizeof(dp)); memset(Map,0,sizeof(Map)); for(int i=1; i<=n; i++) for(int j = 1; j<=i; j++) scanf("%d",&Map[i][j]);//上半部分的输入 for(int i=n+1; i<=2*n-1; i++) for(int j = 1; j<=2*n-i; j++) scanf("%d",&Map[i][j]);//下半部分的输入 dp[1][1] = Map[1][1]; for(int i=1; i<=n; i++) for(int j = 1; j<=i; j++) { dp[i+1][j] = max(dp[i+1][j],dp[i][j]+Map[i+1][j]); dp[i+1][j+1] = max(dp[i+1][j+1],dp[i][j]+Map[i+1][j+1]); }//上半部分向下的时候每一个点都有两种选择。 for(int i=n+1; i<=2*n-1; i++) for(int j = 1; j<=2*n-i; j++) { dp[i][j] = max(dp[i-1][j],dp[i-1][j+1]) + Map[i][j]; }//下半部分向下走的时候每一个点都取决于它上面的两个点。 printf("Case %d: %d\n",k++,dp[2*n-1][1]); } return 0; }

 

Light OJ 1004 - Monkey Banana Problem---- dp题解

原文:http://www.cnblogs.com/biu-biu-biu-/p/5731462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!