Longest Run on a Snowboard UVA

来源:互联网 发布:js字符split 编辑:程序博客网 时间:2024/06/08 18:23

比较简单的一道题目,按照dfs和动态规划来解即可,注意在dfs中ans被初始化为1,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>using namespace std;int R, C;int N;string name;int area[110][110];int dx[] = {0,-1,0,1};int dy[] = {-1,0,1,0};int dp[110][110];int dfs(int i,int j){if (dp[i][j] >= 0) return dp[i][j];int& ans = dp[i][j];ans = 1;for (int t = 0; t < 4; t++){int x, y;x = i + dx[t];y = j + dy[t];if (x < 0 || x >= R || y < 0 || y >= C) continue;if (area[x][y] < area[i][j])ans = max(ans, dfs(x, y) + 1);}return ans;}int main(){cin >> N;while (N--){cin >> name >> R >> C;memset(dp,-1,sizeof(dp));for (int i = 0; i < R; i++){for (int j = 0; j < C; j++){cin >> area[i][j];}}int ans = 0;for (int i = 0; i < R; i++){for (int j = 0; j < C; j++){ans = max(ans,dfs(i,j));}}cout << name << ": " << ans << endl;}return 0;}


原创粉丝点击