动态规划_百炼 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 }

 

转载于:https://www.cnblogs.com/MapReduce/p/8367263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值