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 老子是北瓜 @ 2020-04-01 21:25:17
竟然爆粗口了
by Prean @ 2020-04-01 21:25:31
@DongHuangZhong 我还没举报呢。。。这只是因为皮才截的图。。。。。。
by DongHuangZhong @ 2020-04-01 21:25:44
@老子是白菜 最后一个不过,你把我标明要注释的注释掉,提交就知道,提示的是这个:Wrong Answer. wrong answer On line 1 column 1, read 5, expected 1.
by 老子是北瓜 @ 2020-04-01 21:26:10
居然不让下数据
by DongHuangZhong @ 2020-04-01 21:26:45
@limaopipi2022 不好意思,我今天刚来这,不懂规矩。我还以为这里的比较不友好呢
by Prean @ 2020-04-01 21:27:25
为什么要用cmp1,难道greater它不香吗???
by Aw顿顿 @ 2020-04-01 21:27:44
@DongHuangZhong 你来这里问问题态度是什么样的?
我们认为你表意不清不能理解就变成你们不看开始的注释的吗?谁TM会抄了题来这炫耀???
的啦?
行叭,随你便。
by 老子是北瓜 @ 2020-04-01 21:27:50
int n,m,maxn,maxj,maxi,w,top=0,g[101][101],f[101][101];
虽然按常理讲没啥问题,但是我猜可能是top这个变量名出了问题?
by Prean @ 2020-04-01 21:28:29
@DongHuangZhong 洛谷是个学术网站(确信),管理不经常暴政(P.S.这种声明放代码前面,不然会被以为是线性筛的)
by 老子是北瓜 @ 2020-04-01 21:29:13
@limaopipi2022 线性筛是啥?