DP\记忆化搜索-牛客寒假集训营3-牛牛的DRB迷宫I
DP-牛客寒假集训营3-牛牛的DRB迷宫I
题目:
题意:
求迷宫问题的方案数量。与——求迷宫问题的方案数量。与——求迷宫问题的方案数量。与——DP题型总结中的《摘花生》类似。中的《摘花生》类似。中的《摘花生》类似。
暴搜三个分支指数级别的复杂度必然会T暴搜三个分支指数级别的复杂度必然会T暴搜三个分支指数级别的复杂度必然会T
一、记忆化搜索:一、记忆化搜索:一、记忆化搜索:
每个点只递归一次用数组dp来保存,当再次搜索这个点的时候可以直接返回值无序递归。每个点只递归一次用数组dp来保存,当再次搜索这个点的时候可以直接返回值无序递归。每个点只递归一次用数组dp来保存,当再次搜索这个点的时候可以直接返回值无序递归。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=55;
const long long mod=1e9+7;
int n,m;
char s[MAXN][MAXN];
long long dp[MAXN][MAXN];
long long dp_dfs(int x,int y)
{if(x>n||y>m)return 0;if(dp[x][y]!=-1)return dp[x][y];if(s[x][y]=='D')return dp[x][y]=dp_dfs(x+1,y);if(s[x][y]=='R')return dp[x][y]=dp_dfs(x,y+1);if(s[x][y]=='B')return dp[x][y]=(dp_dfs(x+1,y)+dp_dfs(x,y+1))%mod;
}
int main()
{scanf("%d %d",&n,&m);memset(dp,-1,sizeof(dp));dp[n][m]=1;for(int i=1;i<=n;++i){scanf("%s",s[i]+1);}printf("%lld\n",dp_dfs(1,1));return 0;
}
二、递推写法:二、递推写法:二、递推写法:
按照递归写法写DP:dp[i][j]从(i,j)位置走到(n,m)位置的方案数。则dp[n][m]=1。按照递归写法写DP:dp[i][j]从(i,j)位置走到(n,m)位置的方案数。则dp[n][m]=1。按照递归写法写DP:dp[i][j]从(i,j)位置走到(n,m)位置的方案数。则dp[n][m]=1。
①、mp[i][j]=R:dp[i][j]=dp[i][j+1]①、mp[i][j]=R:dp[i][j]=dp[i][j+1]①、mp[i][j]=R:dp[i][j]=dp[i][j+1]
②、mp[i][j]=D:dp[i][j]=dp[i+1][j]②、mp[i][j]=D:dp[i][j]=dp[i+1][j]②、mp[i][j]=D:dp[i][j]=dp[i+1][j]
③、mp[i][j]=R:dp[i][j]=dp[i+1][j]+dp[i][j+1]③、mp[i][j]=R:dp[i][j]=dp[i+1][j]+dp[i][j+1]③、mp[i][j]=R:dp[i][j]=dp[i+1][j]+dp[i][j+1]
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int maxn=55;
int n,m;
char mp[maxn][maxn];
ll dp[maxn][maxn];int dfs(int x,int y)//暴搜
{if(x<1||y<1||x>m||y>n) return 0;if(x==n&&y==m) return 1;if(mp[x][y]=='R') return dfs(x,y+1)%mod;if(mp[x][y]=='D') return dfs(x+1,y)%mod;if(mp[x][y]=='B') return (dfs(x+1,y)+dfs(x,y+1))%mod;
}int main()
{memset(mp,'!',sizeof(mp));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>mp[i][j];dp[n][m]=1;int i,j;for(i=n;i>=1;i--)for(j=m;j>=1;j--){if(i==n&&j==m) continue;if(mp[i][j]=='R') dp[i][j]=dp[i][j+1]%mod;if(mp[i][j]=='D') dp[i][j]=dp[i+1][j]%mod;if(mp[i][j]=='B') dp[i][j]=(dp[i+1][j]+dp[i][j+1])%mod;}cout<<dp[1][1]%mod<<endl;return 0;
}
DP\记忆化搜索-牛客寒假集训营3-牛牛的DRB迷宫I相关推荐
- (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II
2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II 思路: 一开始我是考虑全部都是B会怎么样,然后删改,结果到后面发现很难推到普遍规律(可能是因为我没看出来). 看了题解之后,觉得这题出的挺有意 ...
- 构造-牛客寒假集训营3-牛牛的DRB迷宫II
构造-牛客寒假集训营3-牛牛的DRB迷宫II 题目: 题意: 输入一个数字,表示从起点(1,1)到终点(n,m)的方案数量,输出满足条件的迷宫.输入一个数字,表示从起点(1,1)到终点(n,m)的方案 ...
- 牛客寒假集训营 牛牛战队的比赛地
题目传送门 我好菜,什么题都看不出算法,到了别人那什么都是板子题T_T 三分板子(强行板子.假装大佬)题: struct node {double x, y; } p[100010]; int n; ...
- 牛客国庆集训派对Day2: E. 数据排序(状压DP+记忆化搜索)
E. 数据排序 题目描述 机器学习通常需要用到大量的人工标注好的数据进行训练.现在有这么一个数据集,有 N 个张照片,每张照片中都有一个模特.某个研究员想要训练一个机器学习算法,能够根据照片对模特的魅 ...
- C - Digital Path 计蒜客 - 42397(dp记忆化搜索)
题目:vj地址 思路:dp[i][j][k]代表 以i,j结尾 有k长度的路径数量,k最大等于4,如果k超过4,也是等于4. 那么转移:dp[i][j][k]+={dp[x][y][k-1]}(x,y ...
- 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]
题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- 数位dp 记忆化搜索java_hdu 5787 数位dp,记忆化搜索
题意:求区间[l,r]内有多少个数符合,这个数的任意的相邻k位数(digits),这k个数都两两不相等 l,r范围是1~1e18,k是2~5 思路:数位DP,因为K<=5,我们最多需要保存下来当 ...
最新文章
- 从源码分析DEARGUI之add_tree_node
- php中$GLOBALS
- “悟道”公开课第二讲丨如何优化大模型输出结果
- 如何掌握java API的方法
- 使用Spring Security进行自动登录验证
- 【有奖征文】WEB前端大作战,走在技术最前端!
- python单引号和什么的作用几乎是一样的_Python中单双多引号的用法与区别
- php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?
- 01-老马jQuery教程-jQuery入口函数及选择器
- 最新国民经济行业分类sql文件
- 创 业 项 目 计 划 书 样 本
- 远程桌面无法复制粘贴问题
- 【分享】小米MIUI免root一键删除系统内置软件
- 好用的PDF解密工具哪个好?
- 解决WebStorme点击谷歌浏览器图标无反应问题
- 加减法叫做什么运算_加减法是什么意思
- 如何改变图片容量大小不影响清晰度
- 当类模板遇到了友元函数
- window常用自带工具
- 张忠谋、蔡明介谈双通并购案,对台湾半导体产业链影响