Cy6206 @ 2024-11-30 12:41:02
70分代码,不知道哪里出问题了,大佬帮帮本蒟蒻吧
#include<iostream>
#include<algorithm>
using namespace std;
const int N=101;
int mx[N][N],f[N][N];
int main(){
int n,m,ans=0;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>f[i][j];
mx[i][j]=1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(f[i-1][j]<f[i][j]&&i>0) mx[i][j]=max(mx[i][j],mx[i-1][j]+f[i][j]-f[i-1][j]);
if(f[i+1][j]<f[i][j]&&i<n-1) mx[i][j]=max(mx[i][j],mx[i+1][j]+f[i][j]-f[i+1][j]);
if(f[i][j-1]<f[i][j]&&j>0) mx[i][j]=max(mx[i][j],mx[i][j-1]+f[i][j]-f[i][j-1]);
if(f[i][j+1]<f[i][j]&&j<n-1) mx[i][j]=max(mx[i][j],mx[i][j+1]+f[i][j]-f[i][j+1]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(ans<mx[i][j]) ans=mx[i][j];
}
}
cout<<ans;
return 0;
}
by Arefa @ 2024-11-30 13:41:43
对于每个点,只有当,它四周的点中,比它低的点为起点的最大路程都计算好了,计算该点为起点的最大路程才会正确。
例如:对于
4 | 3 |
---|---|
1 | 2 |
而言,以 4 为起点时,最长路径应该为 4。但是如果我们最先计算该点的路径长度,由于此时以 3 为起点和以 2 为起点的最长路径都是初始值 1,因此我们会计算得到以 4 为起点的路径长为 1+1=2。
解决方法:将每个点按高度从小到大排序,按这个顺序依次进行计算。
by Cy6206 @ 2024-12-04 14:13:48
谢谢大佬