求助,WA掉了#2和#10

P1434 [SHOI2002] 滑雪

Xiao_Xian @ 2019-08-30 10:14:19

用的记忆花搜索

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int f[31][31],r,c,a[31][31],vis[31][31],ans;
short fh[4]={1,-1,0,0};
short fl[4]={0,0,1,-1};
int dfs(int h,int l)
{
    if(f[h][l]!=1) return f[h][l];
    for(int i=0;i<4;i++)
    {
        if(h+fh[i]>0&&h+fh[i]<=r&&l+fl[i]>0&&l+fl[i]<=c&&a[h+fh[i]][l+fl[i]]<a[h][l])
        {
            f[h][l]=max(f[h][l],dfs(h+fh[i],l+fl[i])+1);
        }
    }
    return f[h][l];
}
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]);
            f[i][j]=1;
        }
    }
    int maxn=-1;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
          maxn=max(dfs(i,j),maxn);
        }
    }
    printf("%d",maxn);
    return 0;
}
/*
3 6
1 2 3 4 5 6
14 15 16 17 18 7
13 12 11 10 9 8
*/

by hanyufei @ 2019-08-30 10:21:15

include<cstdio>

define maxn 110

define max(a,b) a>b?a:b

using namespace std; int map[maxn][maxn],f[maxn][maxn],r,c,dfs(int,int),m; int main() { scanf("%d%d",&r,&c); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++){ scanf("%d",&map[i][j]);f[i][j]=1; }
for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) m=max(m,dfs(i,j)); printf("%d",m);
return 0; } inline int dfs(int x,int y) { if(f[x][y]!=1) return f[x][y]; int b=0;

if(x>=1&&y>=1&&x<r&&y<=c&&map[x][y]>map[x+1][y])    b=max(b,(dfs(x+1,y)+1));
if(x>=1&&y>=1&&x<=r&&y<c&&map[x][y]>map[x][y+1])    b=max(b,(dfs(x,y+1)+1));
if(x>1&&y>=1&&x<=r&&y<=c&&map[x][y]>map[x-1][y])    b=max(b,(dfs(x-1,y)+1));
if(x>=1&&y>1&&x<=r&&y<=c&&map[x][y]>map[x][y-1])    b=max(b,(dfs(x,y-1)+1));
f[x][y]=max(f[x][y],b);
return f[x][y];

}


by Smile_Cindy @ 2019-08-30 10:38:12

请不要使用Markdown来强调头文件的重要性。


by Xiao_Xian @ 2019-08-30 18:25:43

@hanyufei ?你想表达什么。。。这貌似是题解里的那个代码吧,我的思路貌似跟他的思路一样只是代码写出来不同诶。。不知为何WA。


|