nyoj10_skiing

来源:互联网 发布:淘宝禁售拉卡拉 编辑:程序博客网 时间:2024/06/04 23:21

原题链接》》》


状态转移方程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;} 
0 0
原创粉丝点击