动态规划_百炼 1088 滑雪

Posted mapreduce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划_百炼 1088 滑雪相关的知识,希望对你有一定的参考价值。

 1 #define _CRT_SECURE_NO_WARNINGS  
 2 #include <stdio.h>
 3 #include <math.h>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <vector>
 7 #include <map>
 8 #include <queue>
 9 #include <string>
10 #include <iostream>
11 #include <ctype.h>
12 #include <string.h>
13 #include <set>
14 #include <stack>
15 #include<functional>
16 using namespace std;
17 #define size 105
18 #define maxn  1<<30
19 int dp[size][size];//以i,j为结尾的线段所滑行的最大距离
20 int a[size][size];
21 int row, col;
22 int go[4][2] = { 1, 0, 0, 1, -1, 0, 0, -1 };
23 int solve(int x, int y){//表示以x,y结尾的点所滑翔的最大距离,从最低点往上收敛
24     if (dp[x][y] != -1) return dp[x][y];
25     int ret = 1;
26     for (int i = 0; i < 4; i++){
27         int tx = x + go[i][0];
28         int ty = y + go[i][1];
29         if (tx < 1 || ty<1 || tx>row || ty>col) continue;
30         if(a[x][y]<a[tx][ty]) ret = max(ret, solve(tx, ty)+1);
31     }
32     dp[x][y] = ret;
33     return ret;
34 }
35 int main(){
36     cin >> row >> col;
37     for (int i = 1; i <= row; i++)
38         for (int j = 1; j <= col; j++){
39             dp[i][j] = -1;
40             cin >> a[i][j];
41         }
42     int ans = 1;
43     for (int i = 1; i <= row; i++)
44         for (int j = 1; j <= col; j++)
45             ans = max(ans, solve( i, j));
46     cout << ans << endl;
47     system("pause");
48     return 0;
49 }

 

以上是关于动态规划_百炼 1088 滑雪的主要内容,如果未能解决你的问题,请参考以下文章

动态规划_百炼1664 放苹果

动态规划_百炼4120 硬币

动态规划_百炼 4121 股票买卖

动态规划_百炼4122 切割回文

动态规划_百炼 4117 简单的整数划分问题

POJ_1088_(dp)(记忆化搜索)