您的位置:首页 > 其它

UVA-10285 Longest Run on a Snowboard

2015-12-08 23:22 986 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: