题目:vj地址
思路:dp[i][j][k]代表 以i,j结尾 有k长度的路径数量,k最大等于4,如果k超过4,也是等于4.
那么转移:dp[i][j][k]+={dp[x][y][k-1]}(x,y满足a[x][y]+1=a[i][j]);
如果k=4,还有dp[i][j][k]+={dp[x][y][k]}(x,y满足a[x][y]+1=a[i][j]);

细节见代码。

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define se secondusing namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<int,int > pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=1e9+7;
const ll N =2e6+10;
const double eps = 1e-4;
const double pi=acos(-1);
ll gcd(int a,int b){return !b?a:gcd(b,a%b);}
ll dp[1100][1100][5];
ll a[1100][1100];
ll n,m;
bool check1(ll x,ll y)//检查是否能转移
{for(ll i=0;i<4;i++){ll x1=x+dx[i],y1=y+dy[i];if(x1<=0||x1>n||y1<=0||y1>m) continue;if(a[x][y]-1==a[x1][y1]) return 0;}return 1;
}
bool check2(ll x,ll y)
{for(ll i=0;i<4;i++){ll x1=x+dx[i],y1=y+dy[i];if(x1<=0||x1>n||y1<=0||y1>m) continue;if(a[x][y]+1==a[x1][y1]) return 0;}return 1;
}
ll dfs(ll i,ll j,ll k)//记忆化搜索
{if(k==1){if(check1(i,j)) return 1;else return 0;}if(dp[i][j][k]!=-1) return dp[i][j][k];ll &ans=dp[i][j][k];ans=0;for(ll w=0;w<4;w++){ll x1=i+dx[w],y1=j+dy[w];if(x1<=0||x1>n||y1<=0||y1>m) continue;if(a[x1][y1]+1==a[i][j]){ans+=dfs(x1,y1,k-1);if(k==4) ans=(ans+dfs(x1,y1,4))%mod;//k==4时的特判转移条件}}return ans;
}
int main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);#endifmemset(dp,-1,sizeof dp);scanf("%lld%lld",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]);ll ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(check2(i,j)) ans=(ans+dfs(i,j,4))%mod;//满足转移条件时才能加}}cout<<ans<<endl;return 0;
}

C - Digital Path 计蒜客 - 42397(dp记忆化搜索)相关推荐

  1. C - Digital Path 计蒜客 - 42397 05-29

    C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...

  2. DP\记忆化搜索-牛客寒假集训营3-牛牛的DRB迷宫I

    DP-牛客寒假集训营3-牛牛的DRB迷宫I 题目: 题意: 求迷宫问题的方案数量.与--求迷宫问题的方案数量.与--求迷宫问题的方案数量.与--DP题型总结中的<摘花生>类似.中的< ...

  3. 牛客国庆集训派对Day2: E. 数据排序(状压DP+记忆化搜索)

    E. 数据排序 题目描述 机器学习通常需要用到大量的人工标注好的数据进行训练.现在有这么一个数据集,有 N 个张照片,每张照片中都有一个模特.某个研究员想要训练一个机器学习算法,能够根据照片对模特的魅 ...

  4. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]

    题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...

  5. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】

    题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  6. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  7. 数位dp 记忆化搜索java_hdu 5787 数位dp,记忆化搜索

    题意:求区间[l,r]内有多少个数符合,这个数的任意的相邻k位数(digits),这k个数都两两不相等 l,r范围是1~1e18,k是2~5 思路:数位DP,因为K<=5,我们最多需要保存下来当 ...

  8. pku 1191 棋盘分割 DP / 记忆化搜索

    http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2]  = min(d ...

  9. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

最新文章

  1. Error was tenMinuteCache Cache: The Disk store is not active.
  2. 深度学习:tensorflow层次结构,朴素NN代码实现tensorflow
  3. (6) ebj学习:ejb使用jpa注解
  4. POJ1273 Drainage Ditches(最大流基础题)
  5. 企业认证CMMI都需要那些流程?
  6. matlab 求解发动机换算转速,换算转速(发动机换算转速定义)
  7. 在线小说网站的设计与实现(附源码)
  8. gitlab使用教程
  9. PR短视频转场预设 60个摇晃抖动效果过渡合集
  10. 2019hdu暑假多校训练赛第五场1004 equation hdu 6627 (高中数学题)
  11. 商誉风险只是局部爆发 市场整体业绩没那么糟
  12. Nodejs手把手教程
  13. java画图消除锯齿_java – JButton文本的消除锯齿
  14. axios 的responseType 类型动态设置
  15. 传统6大茶类都有哪些
  16. 什么是网页设计中的滚动设计?如何进行滚动设计?
  17. Arrays类——Arrays.asList()方法使用
  18. FPGA知识点汇总(verilog、数字电路、时序分析、跨时钟域、亚稳态)
  19. 机器学习面试经验--2017年持续更新
  20. LiFi 真的可以取代 Wi-Fi 吗?

热门文章

  1. 数学中不可能实现的图形
  2. 一组动图看懂3D打印原理
  3. html写出日出,描写日出优美句子
  4. 不同用户同时并发测压_简单聊聊吞吐量(TPS)、QPS、并发数、响应时间(RT)概念...
  5. 猴子偷桃php代码,C++实现猴子吃桃的示例代码
  6. python 接口自动化_Python 接口自动化测试
  7. vc 控制台添加托盘显示_开源:ESP8266读DHT11温湿度,小程序实时显示
  8. yum php fpm5.6,CentOS 7 yum 安装php5.6
  9. ae渲染出现错误是什么问题_[Switch]解决OPENWRT路由,使用UU加速器等出现相同IP,DNS解析错误问题...
  10. 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利