题目链接: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;