ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蓝桥杯跳跃问题

2022-03-01 21:33:37  阅读:139  来源: 互联网

标签:问题 方位 int dfs 蓝桥 110 ans 跳跃 dp


题目链接:https://www.lanqiao.cn/problems/553/learning/

题目比较清晰,这里提供两种思路供于参考;;

先说第一种思路,dfs暴搜

爆搜就不用多说了,直接开搜

需要注意的是,按照题目要求只能一个方位最大只能走九个方位,然后按照题目的要求设计就行了

这个是演算时候的草稿,随便看看就行了

详细情况以及注意事项请看注释

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[110][110];
 4 int  n,m;
 5 int dir[9][2]={{0,1},{0,2},{0,3},{1,0},{1,1},{1,2},{2,0},{2,1},{3,0}};//九个方位 
 6 int ans=INT_MIN;//烧饼作用不用对说了吧 
 7 bool vis[110][110];//标记数组 
 8 void dfs(int x,int y,int sum)
 9 {
10     vis[x][y]=1;//标记 
11     if(sum<=ans)//剪枝 
12     return ;
13      if(x==n&&y==m)//返回条件 
14     ans=sum;
15     //下面开搜 
16     for(int i=0;i<9;i++)
17     {
18         int newx=x+dir[i][0];
19         int newy=y+dir[i][1];
20         if(newx>=1&&newy>=1&&newx<=n&&newy<=m&&vis[newx][newy]==0)//边界条件以及满足情况的(没有走过的路) 
21         {
22             dfs(newx,newy,sum+a[newx][newy]);//下一层 
23             vis[newx][newy]=0;//回溯 
24         }
25     }
26 }
27 int main()
28 {
29     ios::sync_with_stdio(false);
30     memset(vis,0,sizeof(vis));
31       cin>>n>>m;
32   for(int i=1;i<=n;i++)
33   {
34     for(int j=1;j<=m;j++)
35     {
36       cin>>a[i][j];
37     }
38    }
39    dfs(1,1,a[1][1]);
40    cout<<ans<<endl;
41   return 0;
42 }

下面采用动态规划做法:

其实也是很常规的动态规划,不过较dfs来说还是搜索更为明确一些

下面提供dp思路以及注意事项:

#pragma GCC optimize(2)//手写 
#include<bits/stdc++.h>
using namespace std;
int dp[110][110];//走到最大的值 
int ans;//能够到达此点的所有点的权值最大值 
int n,m; 
int x[9]={0,0,0,-1,-1,-1,-2,-2,-3};//九个方位 
int y[9]={-3,-2,-1,-2,-1,0,-1,0,0};//九个方位 
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(register int i=1;i<=n;i++)
	{
		for(register int j=1;j<=m;j++)
		cin>>dp[i][j];
	}
	for(int i=1;i<=n;i++)
	{
		for(register int j=1;j<=m;j++)
		{
			ans=INT_MIN;//烧饼 
			for(int k=0;k<9;k++)
			{
				if(i+x[k]>=1&&j+y[k]>=1)//不是在原来的位置即已经出发了 
				ans=max(ans,dp[i+x[k]][j+y[k]]);//转移方程——它本身和下一个位置谁更大 
			}
			if(ans!=INT_MIN)
			{
				dp[i][j]+=ans;//更新该点的权值,用旧值来覆盖 
			}
		}
	}
	cout<<dp[n][m]<<endl;
	return 0;
}

  

标签:问题,方位,int,dfs,蓝桥,110,ans,跳跃,dp
来源: https://www.cnblogs.com/LQS-blog/p/15952677.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有