f(i,j,k)表示第i行,放的雷的状态为j{0表示不放,1表示往上放,2表示往下放,3表示上下都放},剩余还有k(0<=k<=2)个要放的方案数。

先给出我这个sb写的错误代码,死都没调出来。优越的做法在后面

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. #define MOD 100000007
  5. int T,n;
  6. char a[10010];
  7. int f[10010][4][10];
  8. int main(){
  9. scanf("%d",&T);
  10. for(;T;--T){
  11. scanf("%s",a+1);
  12. n=strlen(a+1);
  13. a[0]='0';
  14. memset(f,0,sizeof(f));
  15. f[1][0][a[1]-'0']=1;
  16. if(a[1]-'0'-1>=0){
  17. f[1][1][a[1]-'0'-1]=1;
  18. }
  19. if(a[1]-'0'-1>=0){
  20. f[1][2][a[1]-'0'-1]=1;
  21. }
  22. if(a[1]-'0'-2>=0){
  23. f[1][3][a[1]-'0'-2]=1;
  24. }
  25. for(int i=1;i<n;++i){
  26. for(int j=a[i]-'0';j>=a[i]-'0'-2 && j>=0;--j){
  27. if(j<=2 && j+0<=a[i+1]-'0'){
  28. if(j==0){
  29. f[i+1][0][a[i+1]-'0']=(f[i+1][0][a[i+1]-'0']+f[i][0][0])%MOD;
  30. }
  31. else if(j==1){
  32. f[i+1][1][a[i+1]-'0'-1]=(f[i+1][1][a[i+1]-'0'-1]+f[i][0][1])%MOD;
  33. f[i+1][2][a[i+1]-'0'-1]=(f[i+1][2][a[i+1]-'0'-1]+f[i][0][1])%MOD;
  34. }
  35. else{
  36. f[i+1][3][a[i+1]-'0'-2]=(f[i+1][3][a[i+1]-'0'-2]+f[i][0][2])%MOD;
  37. }
  38. }
  39. }
  40. for(int j=a[i]-'0'-1;j>=a[i]-'0'-2-1 && j>=0;--j){
  41. if(j<=2 && j+1<=a[i+1]-'0'){
  42. if(j==0){
  43. f[i+1][0][a[i+1]-'0'-1]=(f[i+1][0][a[i+1]-'0'-1]+f[i][1][0])%MOD;
  44. }
  45. else if(j==1){
  46. f[i+1][1][a[i+1]-'0'-2]=(f[i+1][1][a[i+1]-'0'-2]+f[i][1][1])%MOD;
  47. f[i+1][2][a[i+1]-'0'-2]=(f[i+1][2][a[i+1]-'0'-2]+f[i][1][1])%MOD;
  48. }
  49. else{
  50. f[i+1][3][a[i+1]-'0'-3]=(f[i+1][3][a[i+1]-'0'-3]+f[i][1][2])%MOD;
  51. }
  52. }
  53. }
  54. for(int j=a[i]-'0'-1;j>=a[i]-'0'-2-1 && j>=0;--j){
  55. if(j<=2 && j+1<=a[i+1]-'0'){
  56. if(j==0){
  57. f[i+1][0][a[i+1]-'0'-1]=(f[i+1][0][a[i+1]-'0'-1]+f[i][2][0])%MOD;
  58. }
  59. else if(j==1){
  60. f[i+1][1][a[i+1]-'0'-2]=(f[i+1][1][a[i+1]-'0'-2]+f[i][2][1])%MOD;
  61. f[i+1][2][a[i+1]-'0'-2]=(f[i+1][2][a[i+1]-'0'-2]+f[i][2][1])%MOD;
  62. }
  63. else{
  64. f[i+1][3][a[i+1]-'0'-3]=(f[i+1][3][a[i+1]-'0'-3]+f[i][2][2])%MOD;
  65. }
  66. }
  67. }
  68. for(int j=a[i]-'0'-2;j>=a[i]-'0'-2-2 && j>=0;--j){
  69. if(j<=2 && j+2<=a[i+1]-'0'){
  70. if(j==0){
  71. f[i+1][0][a[i+1]-'0'-2]=(f[i+1][0][a[i+1]-'0'-2]+f[i][3][0])%MOD;
  72. }
  73. else if(j==1){
  74. f[i+1][1][a[i+1]-'0'-3]=(f[i+1][1][a[i+1]-'0'-3]+f[i][3][1])%MOD;
  75. f[i+1][2][a[i+1]-'0'-3]=(f[i+1][2][a[i+1]-'0'-3]+f[i][3][1])%MOD;
  76. }
  77. else{
  78. f[i+1][3][a[i+1]-'0'-4]=(f[i+1][3][a[i+1]-'0'-4]+f[i][3][2])%MOD;
  79. }
  80. }
  81. }
  82. }
  83. printf("%d\n",f[n][0][0]+f[n][1][0]+f[n][2][0]+f[n][3][0]);
  84. }
  85. return 0;
  86. }

然后是斓爷优越的记忆化搜索

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <cstring>
  6. using namespace std;
  7. long long use[11000][3][3],dp[11000][3][3],qw,wq,l;
  8. char s[11000];
  9. long long mo=100000007;
  10. long long num[3]={1,2,1};
  11. long long getans(long long d,long long a,long long b)
  12. {
  13. if (d>l)
  14. {
  15. if (b!=0) return 0;
  16. return 1;
  17. }
  18. if (b>2 || a+b>s[d-1]-48) return 0;
  19. if (use[d][a][b]==qw) return dp[d][a][b];
  20. use[d][a][b]=qw;
  21. dp[d][a][b]=getans(d+1,b,s[d-1]-48-a-b)*num[b]%mo;
  22. return dp[d][a][b];
  23. }
  24.  
  25. int main()
  26. {
  27. scanf("%lld",&wq);
  28. for (qw=1;qw<=wq;qw++)
  29. {
  30. scanf("%s",&s);
  31. l=strlen(s);
  32. printf("%lld\n",(getans(1,0,0)+getans(1,0,1)+getans(1,0,2))%mo);
  33. }
  34. }

【动态规划】【记忆化搜索】hdu5965 扫雷的更多相关文章

  1. sicily 1176. Two Ends (Top-down 动态规划+记忆化搜索 v.s. Bottom-up 动态规划)

    Description In the two-player game "Two Ends", an even number of cards is laid out in a ro ...

  2. Codevs_1017_乘积最大_(划分型动态规划/记忆化搜索)

    描述 http://codevs.cn/problem/1017/ 给出一个n位数,在数字中间添加k个乘号,使得最终的乘积最大. 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提 ...

  3. Poj-P1088题解【动态规划/记忆化搜索】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: http://poj.org/problem?id=1088 题目描述: 区域由一个二维数组给 ...

  4. UVA_437_The_Tower_of_the_Babylon_(DAG上动态规划/记忆化搜索)

    描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  5. 滑雪---poj1088(动态规划+记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 有两种方法 一是按数值大小进行排序,然后按从小到大进行dp即可: #include <iostream> #incl ...

  6. [NOIP2017] 逛公园 (最短路,动态规划&记忆化搜索)

    题目链接 Solution 我只会60分暴力... 正解是 DP. 状态定义: \(f[i][j]\) 代表 \(1\) 到 \(i\) 比最短路长 \(j\) 的方案数. 那么很显然最后答案也就是 ...

  7. 动态规划——I 记忆化搜索

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  8. 动态规划——数字三角形(递归or递推or记忆化搜索)

    动态规划的核心就是状态和状态转移方程. 对于该题,需要用抽象的方法思考,把当前的位置(i,j)看成一个状态,然后定义状态的指标函数d(i,j)为从格子出发时能得到的最大和(包括格子本身的值). 在这个 ...

  9. Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

随机推荐

  1. WinRAR分割超大文件

    在自己的硬盘上有一个比较大的文件,想把它从网上通过E-Mail发送给朋友时,却发现对方的收信服务器不能够支持那么大的文件……,这时即使用ZIP等压缩软件也无济于事,因为该文件本身已经被压缩过了.于是许 ...

  2. js基础知识点收集

    js基础知识点收集 js常用基本类型 function show(x) { console.log(typeof(x)); // undefined console.log(typeof(10)); ...

  3. web_一些常用的线上脚本地址记录(个人使用)

    1.jquery <script src="http://code.jquery.com/jquery-1.4.1.min.js"></script> 2. ...

  4. hdu 2680 Choose the best route (dijkstra算法 最短路问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Time Limit: 2000/1000 MS ( ...

  5. linux下暴力破解工具hydra【转】

    一.简介 Number one of the biggest security holes are passwords, as every password security study shows. ...

  6. nvidia tk1使用记录--基本环境搭建

    前言 项目最开始是在X86+Nvidia(ubuntu+opencv+cuda)平台上实现,达到了期望性能,最近考虑将其移植到嵌入式平台,特别是最近nvidia出了tegra X1,基于和我们使用的g ...

  7. 2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m<=1e5) 解法:很经典的套路,和这题一样:h ...

  8. mysql远程访问cannot connect(10038) 问题解决的过程

    今天用Navicat访问虚拟机上的mysql,无法访问报cannot connect(10038). 首先看是否可以telnet,本机cmd,telnet 192.168.209.128 3306,结 ...

  9. MapReduce案例二:好友推荐

    1.需求 推荐好友的好友 图1: 2.解决思路 3.代码 3.1MyFoF类代码 说明: 该类定义了所加载的配置,以及执行的map,reduce程序所需要加载运行的类 package com.hado ...

  10. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...