20分,打了两个循环,每次枚举2次方向,不知道解题思路是否正确

P1434 [SHOI2002] 滑雪

看了题解,发现滑坡长度每次+1,修改代码后测评结果不变 ``` #include<bits/stdc++.h> using namespace std; int f[105][105],h[105][105],n,m,dx[4]={0,-1,0,1},dy[4]={-1,0,1,0},ans=0; int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>f[i][j]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=0;k<=1;k++) { int tx=i+dx[k];int ty=j+dy[k]; if(h[tx][ty]>=h[i][j]|tx<1|tx>n|ty<1|ty>m)continue; f[i][j]=max(f[i][j],f[tx][ty]+1); } } } for(int i=n;i>=1;i--) { for(int j=m;j>=1;j--) { for(int k=2;k<=3;k++) { int tx=i+dx[k];int ty=j+dy[k]; if(h[tx][ty]>=h[i][j]|tx<1|tx>n|ty<1|ty>m)continue; f[i][j]=max(f[i][j],f[tx][ty]+1); } } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans=max(ans,f[i][j]); cout<<ans; } ```
by Main_WF @ 2022-07-10 11:27:57


突然发现盲点!我输入的居然是f[][]
by Main_WF @ 2022-07-10 11:42:57


修改之后样例都过不了了... ``` #include<bits/stdc++.h> using namespace std; int f[105][105],h[105][105],n,m,dx[4]={0,-1,0,1},dy[4]={-1,0,1,0},ans=1; int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>h[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=0;k<=1;k++) { int tx=i+dx[k];int ty=j+dy[k]; if(h[tx][ty]>=h[i][j]|tx<1|tx>n|ty<1|ty>m)continue; f[i][j]=max(f[i][j],f[tx][ty]+1); } } } for(int i=n;i>=1;i--) { for(int j=m;j>=1;j--) { for(int k=2;k<=3;k++) { int tx=i+dx[k];int ty=j+dy[k]; if(h[tx][ty]>=h[i][j]|tx<1|tx>n|ty<1|ty>m)continue; f[i][j]=max(f[i][j],f[tx][ty]+1); } } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans=max(ans,f[i][j]); cout<<ans; } ```
by Main_WF @ 2022-07-10 11:53:23


|