UVA-10285Longest Run on a Snowboard

来源:互联网 发布:知乎法国婆婆 编辑:程序博客网 时间:2024/06/13 06:43

Brief  description 

Algorithm  analyse

水题一个。

我在思考如何用递推的方式实现?最优子结构如何寻找?

似乎有想法了。让我先研究一下UVA-1629.再思考思考.

Code

#include <iostream>  #include <map>  #include <algorithm>  #include <cstdio>  #include <cstring>  #include <cstdlib>  #include <vector>  #include <queue>  #include <stack>  #include <functional>  #include <set>  #include <cmath>  using namespace std;  #define pb push_back  #define PB pop_back  #define bk back()  #define fs first  #define se second  #define sq(x) (x)*(x)  #define eps (1e-10)  #define INF 1e6  #define clr(x) memset((x),0,sizeof (x))  #define cp(a,b) memcpy((a),(b),sizeof (b))    typedef long long ll;  typedef unsigned long long ull;  typedef pair<int,int> P;  const int maxn=100+5;int Map[maxn][maxn];int dp[maxn][maxn];int m,n;int dfs(int i,int j){     int& ans=dp[i][j];     if(ans) return ans;     int MAX=0;     if(Map[i+1][j]<=Map[i][j]-1&&i+1<m)     {     ans=dfs(i+1,j)+1;     MAX=max(MAX,ans);     }     if(Map[i][j+1]<=Map[i][j]-1&&j+1<n)     {     ans=dfs(i,j+1)+1;     MAX=max(MAX,ans);     }     if(Map[i-1][j]<=Map[i][j]-1&&i-1>-1)     {     ans=dfs(i-1,j)+1;     MAX=max(MAX,ans);     }     if(Map[i][j-1]<=Map[i][j]-1&&j-1>-1)     {     ans=dfs(i,j-1)+1;     MAX=max(MAX,ans);     }     return ans=MAX;}int main(){int T;scanf("%d",&T);while(T--){clr(Map);string name;cin>>name>>m>>n;for(int i=0;i<m;i++)for(int j=0;j<n;j++){scanf("%d",&Map[i][j]);}clr(dp);int Max=0;for(int i=0;i<m;i++)for(int j=0;j<n;j++){Max=max(Max,dfs(i,j));}cout<<name<<": "<<Max+1<<endl;}return 0;}


0 0
原创粉丝点击