洛谷惊现灵异事件!!

P1434 [SHOI2002] 滑雪

cn_lemon @ 2017-07-13 11:30:59

/* 为什么会90分????

第九个点的第二个数字为0(标准输出10),我是8。。。。

鄙人实在看不出来,求大佬(帅哥)解答

*/

#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=100+10;
int a[MAXN][MAXN],w[MAXN][MAXN],ww[MAXN][MAXN];
int r,c,maxx,sum;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
void dfs(int x,int y,int k)
{
    int i,flag=0;
    if(ww[x][y])
    {
        //printf("*%d*\n",sum);
        sum=max(sum,k+ww[x][y]-1);
        //printf("*%d %d %d*\n",k,sum,ww[x][y]);
        return;
    }
    for(i=0;i<4;i++)
    {
        int x1=x+dx[i],y1=y+dy[i];
        if(a[x1][y1]>=a[x][y]||x1<=0||y1<=0||x1>r||y1>c)continue;
        flag=1;
        //printf("%d %d %d %d %d\n",x,y,sum,a[x][y],k);
        dfs(x1,y1,k+1);
        //printf("%d %d %d %d %d\n",x,y,sum,a[x][y],k);
        w[x][y]=max(w[x][y],sum-k+1);
    }
    if(flag==0)
    {
        sum=max(k,sum);
        w[x][y]=1;
    }
}
int main()
{
    scanf("%d%d",&r,&c);
    for(int i=1;i<=r;i++)
    for(int j=1;j<=c;j++)
    scanf("%d",&a[i][j]);
    for(int i=1;i<=r;i++)
    for(int j=1;j<=c;j++)
    if(!ww[i][j])
    {
        sum=0;
        dfs(i,j,1);
        maxx=max(sum,maxx);
        //printf("\n");
        for(int ii=1;ii<=r;ii++)
        for(int jj=1;jj<=c;jj++)
        if(ww[ii][jj]==0)
        ww[ii][jj]=w[ii][jj];
    }
    printf("%d",maxx);
    return 0;
}

by cn_lemon @ 2017-07-21 19:46:21

没人回答我的问题,我只能重新做了

QWQ


by taoran @ 2017-07-27 21:00:17

@WilliamPen +1


by 四氢呋喃 @ 2017-08-04 20:55:12

你这个标题党


by t162 @ 2019-10-07 11:37:07

考古


by _StarDust @ 2019-12-07 17:00:14

考古


上一页 |