大佬进来看看!把数组声明放到结构体前面就不对了??

P1434 [SHOI2002] 滑雪

DongHuangZhong @ 2020-04-01 21:11:51

//这是题解里面的一个答案,我的和他的差不多,但一直过不了最后一个测试
//我就反复对比,然后好像找出了一个BUG ,把数组声明放到std后面就错了?? 
//请大佬看看怎么回事????? 
#include<iostream>
#include<queue>
using namespace std;
//int n,m,maxn,maxj,maxi,w,top=0,g[101][101],f[101][101];//把下面的声明注释,解除这里的封印,你会发现新大陆 
struct node{
    int i,j,num,f;
};//结构体存点
struct cmp1{
    bool operator()(node x,node y){
        return x.num>y.num;
    }
};//优先队列小的在前面
priority_queue<node,vector<node>,cmp1>q;//stl大法好
int n,m,maxn,maxj,maxi,w,top=0,g[101][101],f[101][101];//把这行注释,留上面的!!!!!!! 
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            f[i][j]=1;//长度最开始为1,它自己
            cin>>g[i][j];
            node a;
            a.i=i;a.j=j;a.f=0;a.num=g[i][j];
            q.push(a);//入队
        }
    }
    while(!q.empty()){
        node now1=q.top();//取点
        int i=now1.i;
        int j=now1.j;//坐标
        int now=now1.num;//此点的权值
        q.pop();//出队
        if(g[i-1][j]<now) f[i][j]=max(f[i][j],f[i-1][j]+1);
            if(g[i+1][j]<now) f[i][j]=max(f[i][j],f[i+1][j]+1);
            if(g[i][j-1]<now) f[i][j]=max(f[i][j],f[i][j-1]+1);
            if(g[i][j+1]<now) f[i][j]=max(f[i][j],f[i][j+1]+1);//dp
            if(maxn<f[i][j]) maxn=f[i][j];//取最大值
    }
    cout<<maxn;//输出
    return 0;//第一篇题解,请多支持!
}

by _LHF_ @ 2020-04-01 21:37:16

这么好的题,干嘛不用A*或者网络流去做呀


by DongHuangZhong @ 2020-04-01 21:39:05

@zzl_05 我不是求代码,记忆化搜索,我自己已经写一遍了

#include<cstdio>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
#include<time.h>
#define PP(a,b) cout<<a<<"="<<b<<endl
#define P(a) cout<<a<<endl
#define print(a) cout<<#a<<"="<<a<<endl
#define _for(i,s,e) for(int i=s;i<=e;i++)
using namespace std;
int map[101][101];
int mem[101][101];
int r,c;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
int dfs(int x,int y)
{
    if(mem[x][y]) return mem[x][y];
    int maxx=0;
    _for(i,0,3)
    {
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(xx>=0&&xx<r&&yy>=0&&yy<c&&map[xx][yy]<map[x][y])
        {
            maxx=max(maxx,dfs(xx,yy));
        }

    }
    return mem[x][y]=maxx+1;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //freopen("input.txt","r",stdin);
    cin>>r>>c;
    _for(i,0,r-1)
        _for(j,0,c-1)
            cin>>map[i][j];
    int ans=-1;
    _for(i,0,r-1)
        _for(j,0,c-1)
            ans=max(ans,dfs(i,j));
    cout<<ans;
    return 0;
} 

by __gcd @ 2020-04-01 21:39:43

为什么在前几页大家会攻击lz啊qwq


by SSerxhs @ 2020-04-01 21:44:03

@Aw顿顿 他的表述没有什么歧义。倒是你错误指责了他还说他态度不好就过分了吧


by DongHuangZhong @ 2020-04-01 21:45:18

@SSerxhs 看题看题,这些细节不重要


by SSerxhs @ 2020-04-01 21:46:41

@DongHuangZhong 怀疑是数组越界。

你把数组开到102试试


by jyb666 @ 2020-04-01 22:03:00

@SSerxhs 膜拜金钩大佬


by Suuon_Kanderu @ 2020-04-03 18:58:00

@老子是白菜 xxs


by 老子是北瓜 @ 2020-04-04 09:04:41

@违规用户名1A8F1D09 ?


by 老子是北瓜 @ 2020-04-04 09:05:52

@违规用户名1A8F1D09 我怎么了……


上一页 | 下一页