AcWing 901. 滑雪
原题链接
简单
作者:
霁
,
2019-08-17 11:49:14
,
所有人可见
,
阅读 851
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN = 300 + 10;
int d[MAXN][MAXN], a[MAXN][MAXN];
int x[4] = {1, 0, -1, 0};
int y[4] = {0, 1, 0, -1};
int r, c;
int dp(int i, int j)
{
int & ans = d[i][j];
if(ans != 0)
return ans;
int t = 0;
for(int k = 0; k < 4; k++)
if(i + x[k] >= 0 && i + x[k] < r && j + y[k] >= 0 && j + y[k] < c)
if(a[i + x[k]][j + y[k]] < a[i][j])
t = max(t, dp(i + x[k], j + y[k]));
ans = t + 1;
return ans;
}
int main(void)
{
ios::sync_with_stdio(false);
memset(d, 0, sizeof(d));
cin >> r >> c;
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
cin >> a[i][j];
int ans = 0;
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
ans = max(ans, dp(i, j));
cout << ans;
return 0;
}