题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=171

动态规划:

  d(i,j) = max{d(i-1, j), d(i, j-1)}+mp[i][j];

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7 #define INF 0x7fffffff
 8 #define INPUT freopen("d:\\in.txt", "r", stdin);
 9 #define OUTPUT freopen("d:\\out.txt", "w", stdout);
10 #define N 20
11 
12 int mp[N][N];
13 int d[N][N]; 
14 int m, n;
15 
16 int dp(int i, int j)
17 {
18     if(i<0 || j<0 || i>=m || j>=n)
19         return 0;
20     if(d[i][j] > 0) return d[i][j];
21     return d[i][j] += max(dp(i, j-1), dp(i-1, j))+mp[i][j];
22 } 
23  
24 int main()
25 {
26     //INPUT;
27     while(~scanf("%d%d", &m, &n))
28     {
29         for(int i=0; i<m; i++){
30             for(int j=0; j<n; j++){
31                 scanf("%d", &mp[i][j]);
32             }
33         }
34         memset(d, 0, sizeof(d));
35         printf("%d\n", dp(m-1, n-1)); 
36     }
37     return 0;

 

 posted on 2015-04-01 21:04  平和之心  阅读(103)  评论(0编辑  收藏  举报