_skyline @ 2018-07-18 20:56:57
#include<bits/stdc++.h>
using namespace std;
struct doa{
int x;
int y;
int h;
}e[10050];
int f[10050];
bool camp(doa x,doa y){return x.h>y.h;}//
int m,n;
bool check(int x,int y){
if(e[x].x==e[y].x){
if((e[x].y==e[y].y+1||e[x].y==e[y].y-1)&&f[x]<f[y]+1){
return true;
}
}
else if(e[x].y==e[y].y){
if((e[x].x==e[y].x+1||e[x].x==e[y].x-1)&&f[x]<f[y]+1){
return true;
}
}
return 0;
}
int main(){
int ans=0;
scanf("%d%d",&m,&n);
int i=1;
for(int x=1;x<=m;x++){
for(int y=1;y<=n;y++,i++){
scanf("%d",&e[i].h);
e[i].x=x;
e[i].y=y;
}
}
i--;
sort(e+1,e+1+i,camp);
for(int x=1;x<=i;x++){
f[x]=1;
}
for(int x=i;x>=1;x--){
for(int y=i;y>=x+1;y--){
if(check(x,y)){
f[x]=f[y]+1;
if(f[x]>ans){
ans=f[x];
}
}
}
}
printf("%d",ans);
return 0;
}
by xiangling @ 2018-07-18 21:17:21
您的思路和我差不多,我记得用地推做有几个坑点,我找一下以前的代码。。。
by xiangling @ 2018-07-18 21:20:47
if(judge(i,k)&&a[i].l>max_len&&a[i].sum<a[k].sum)max_len=a[i].l;
其中
inline bool judge(int i,int k)
{
if(abs(a[i].x-a[k].x)==1&&abs(a[i].y-a[k].y)==0)return true;
if(abs(a[i].x-a[k].x)==0&&abs(a[i].y-a[k].y)==1)return true;
return false;
}
by _skyline @ 2018-07-19 07:35:37
@rainman 谢谢