您的位置:首页 > 其它

nyoj10_skiing

2016-11-29 18:09 309 查看
原题链接》》》

状态转移方程dp[i][j]=Max(dp[i][j],四周比自己小的dp值+1);

#include<stdio.h>
#include<string.h>
int num[101][101];
int dp[101][101];
int dr[4][2]={
{0,-1},{0,1},{-1,0},{1,0}
};
int R,C;
int Max(int a,int b){
return a>b?a:b;
}
int Inner(int x,int y){
if(x>=0&&x<R&&y>=0&&y<C)
return 1;
else return 0;
}
int dfs(int x,int y){
if(dp[x][y]>0)
return dp[x][y];
else{
int x1,y1;
for(int i=0;i<4;i++){
x1=x+dr[i][0];
y1=y+dr[i][1];
if(Inner(x1,y1)&&num[x][y]>num[x1][y1]){
dp[x][y]=Max(dfs(x1,y1)+1,dp[x][y]);
}
}
return dp[x][y];
}
}
int main(){
int N;
scanf("%d",&N);
while(N--){
int i,j;
memset(dp,0,sizeof(dp));
scanf("%d%d",&R,&C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
scanf("%d",&num[i][j]);
int max,m;max=0;
for(i=0;i<R;i++){
for(j=0;j<C;j++){
m=dfs(i,j);
if(m>max) max=m;
}
}
printf("%d\n",max+1);
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nyoj10 dp dfs skiing