公司网站维护工作,域名备案要钱吗,wordpress未收到数据库,厦门图书馆网站建设正题 题目大意
有n*m的数字矩阵#xff0c;要求每次只能往相邻的格子移动并取数#xff0c;要求取数的顺序是一个等差的上升序列。求最多能移动多少步 解题思路
过法#xff1a;
爆搜卡常
做法#xff1a;
记忆化用f[i][j][k]表示在第i行第j列朝方向k移动需要的长度要求每次只能往相邻的格子移动并取数要求取数的顺序是一个等差的上升序列。求最多能移动多少步 解题思路
过法
爆搜卡常
做法
记忆化用f[i][j][k]表示在第i行第j列朝方向k移动需要的长度然后记忆化。 详见 https://blog.csdn.net/xuxiayang/article/details/80374235#代码记搜 代码卡常代码
#includecstdio
#includealgorithm
#includeiostream
using namespace std;
int a[102][102],n,m,f[102][102][4],maxs,ns;
void dfs(int x,int y,int n,int dep,int mov)
{if (depmaxs)maxsdep;if (x1nsa[x1][y]-a[x][y]mov)dfs(x1,y,a[x][y],dep1,mov);if (x-10a[x-1][y]-a[x][y]mov)dfs(x-1,y,a[x][y],dep1,mov);if (y1ma[x][y1]-a[x][y]mov)dfs(x,y1,a[x][y],dep1,mov);if (y-10a[x][y-1]-a[x][y]mov)dfs(x,y-1,a[x][y],dep1,mov);
}
int main()
{scanf(%d%d,ns,m);nns;for (int i1;in;i)for (int j1;jm;j)scanf(%d,a[i][j]);for (int i1;in;i)for (int j1;jm;j){ if (a[i1][j]a[i][j])dfs(i1,j,a[i][j],1,a[i1][j]-a[i][j]);if (a[i-1][j]a[i][j])dfs(i-1,j,a[i][j],1,a[i-1][j]-a[i][j]);if (a[i][j1]a[i][j])dfs(i,j1,a[i][j],1,a[i][j1]-a[i][j]);if (a[i][j-1]a[i][j])dfs(i,j-1,a[i][j],1,a[i][j-1]-a[i][j]);if(maxsn*m) {printf(%d,maxs); return 0;}}printf(%d,maxs1);return 0;
}