求助!

P1434 [SHOI2002] 滑雪

@[Novicelpx](/user/189912) 把mapp.high初始化-1 高度可以为0 ```cpp #include<bits/stdc++.h> using namespace std; struct T{ int high,step; }mapp[1007][1007]; struct Y{ int x,y,highh; }sor[1000007]; bool Cmp(Y a,Y b){ return a.highh<b.highh; } int find(int xx,int yy){ int ax[5],ay[5],hmy=0; if(mapp[xx-1][yy].high<mapp[xx][yy].high&&mapp[xx-1][yy].high!=-1){ hmy++; ax[hmy]=xx-1; ay[hmy]=yy; } if(mapp[xx+1][yy].high<mapp[xx][yy].high&&mapp[xx+1][yy].high!=-1){ hmy++; ax[hmy]=xx+1; ay[hmy]=yy; } if(mapp[xx][yy+1].high<mapp[xx][yy].high&&mapp[xx][yy+1].high!=-1){ hmy++; ax[hmy]=xx; ay[hmy]=yy+1; } if(mapp[xx][yy-1].high<mapp[xx][yy].high&&mapp[xx][yy-1].high!=-1){ hmy++; ax[hmy]=xx; ay[hmy]=yy-1; } if(hmy==0)return mapp[xx][yy].step=1; if(hmy==1)return mapp[xx][yy].step=mapp[ax[1]][ay[1]].step+1; if(hmy==2)return mapp[xx][yy].step=max(mapp[ax[1]][ay[1]].step+1,mapp[ax[2]][ay[2]].step+1); if(hmy==3)return mapp[xx][yy].step=max(mapp[ax[3]][ay[3]].step+1,max(mapp[ax[1]][ay[1]].step+1,mapp[ax[2]][ay[2]].step+1)); if(hmy==4)return mapp[xx][yy].step=max(mapp[ax[4]][ay[4]].step+1,max(mapp[ax[3]][ay[3]].step+1,max(mapp[ax[1]][ay[1]].step+1,mapp[ax[2]][ay[2]].step+1))); } int now,ans=0; int main(){ int nx,ny; cin>>nx>>ny; for(int i = 0;i <= nx + 1;i++) for(int j = 0;j <= ny + 1;j++) mapp[i][j].high = -1; for(int i=1;i<=nx;i++){ for(int j=1;j<=ny;j++){ scanf("%d",&mapp[i][j].high); mapp[i][j].step=1; sor[++now].x=i; sor[now].y=j; sor[now].highh=mapp[i][j].high; } } sort(sor+1,sor+now+1,Cmp); for(int i=1;i<=now;i++){ ans=max(ans,find(sor[i].x,sor[i].y)); } cout<<ans; return 0; } ``` ps.这题个人认为你的做法有点复杂,应该记忆化搜索。
by ningago @ 2021-11-11 15:30:51


@[ningago](/user/371968) %%犇犇!十分感谢你,我会尝试记忆化的a.a
by Novicelpx @ 2021-11-11 15:48:15


|