啊 我连学而思的题都做不出来了 我菜菜
查看原帖
啊 我连学而思的题都做不出来了 我菜菜
336603
出言不逊王子楼主2020/6/26 14:27

如题。

感觉思路就是搜索,但是不知道为啥,就是一直爬不出来……

题目链接

代码:

#include<bits/stdc++.h>
#define ns "-1"
#define fs(i,x,y,z) for(ll i=x;i<=y;i+=z)
#define ft(i,x,y,z) for(ll i=x;i>=y;i+=z)
#define ll long long
#define ull unsigned long long
using namespace std;
const int rw[]={-1,0,1,0,-1,1,-1,1},cl[]={0,1,0,-1,-1,1,1,-1};
const int N=1001,inf=0x3f3f3f3f;
inline int read(){
	int date=0,w=1;char c=0;
	while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
	while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
	return date*w;
}
int n,a[N][N],ans,m,psyc,fans,p;
bool ison;//0上1下 
void dfs(int i,int j,int got){//i目前x,j 目前y,got这是第几块 
	if(i<1||j<1||i>n||j>m) return;
	if(got>=p){//ok,到了 
		ans=max(ans,got);
		fans=1;
		return;
	}//如果got正好到了psyc,那么转变
	if(got==psyc) ison=1;
	fs(k,0,3,1){
		int tx=i+rw[k],ty=j+cl[k];
		if(a[tx][ty]<a[i][j]&&ison) dfs(tx,ty,got+1);
		if(a[tx][ty]>a[i][j]&&ison==0) dfs(tx,ty,got+1);
	}
}
int main(){
	n=read(),m=read();
	fs(i,1,n,1){
		fs(j,1,m,1){
			a[i][j]=read();
		}
	}
	fs(s,3,n*m,1){//要走多少块 
		p=s;
		fs(f,2,s-1,1){//第几块是最高点 
			psyc=f;
			fs(i,1,n,1){
				fs(j,1,m,1){
					ison=0;
					dfs(i,j,1);
				}
			}
			
		}
	}
	printf("%d",ans-1);
	return 0;
}
2020/6/26 14:27
加载中...