码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-03 10:15:51      阅读:97      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!