【牛客网/动态规划】蘑菇阵:这种题是不能用深搜解决的

来源:互联网 发布:node2vec 知乎 编辑:程序博客网 时间:2024/05/29 14:00

题目描述
现在有两个好友A和B,住在一片长有蘑菇的由n*m个方格组成的草地,A在(1,1),B在(n,m)。现在A想要拜访B,由于她只想去B的家,所以每次她只会走(i,j+1)或(i+1,j)这样的路线,在草地上有k个蘑菇种在格子里(多个蘑菇可能在同一方格),问:A如果每一步随机选择的话(若她在边界上,则只有一种选择),那么她不碰到蘑菇走到B的家的概率是多少?
输入描述:
第一行N,M,K(1 ≤ N,M ≤ 20, k ≤ 100),N,M为草地大小,接下来K行,每行两个整数x,y,代表(x,y)处有一个蘑菇。
输出描述:
输出一行,代表所求概率(保留到2位小数)
示例1
输入
2 2 1
2 1
输出
0.50
时间限制:1秒 空间限制:32768K

在最初看到题的时候,第一印象就是深搜遍历,记录能够到达终点的路径数目以及在路径中有蘑菇的路径数目,然后求商获得概率。深搜函数很容易,很快就写好了,对于题目给出的实例,因为图只有2*2大,所以马上就能得出正确答案。

#include <stdio.h>int N,M,K;int map[21][21];int next[2][2] = {    1,0,    0,1};int mushroomCount=0;int pathCount=0;int book[21][21];int flag;void dfs(int x,int y){    int next_x,next_y;    if(x == N && y == M){         pathCount++;        return;    }    for(int k=0;k<2;k++){        next_x = x + next[k][0];        next_y = y + next[k][1];        if(next_x < 1 || next_x > N || next_y < 1 || next_y > M)         continue;        if(book[next_x][next_y] == 1) continue;        book[next_x][next_y] = 1;        if(map[next_x][next_y] == 1)            mushroomCount++;        dfs(next_x,next_y);        book[next_x][next_y] = 0;    }}int main(){    scanf("%d %d %d",&N,&M,&K);    for(int i=1;i<=N;i++){        for(int j=1;j<=M;j++){            map[i][j] = 0;            book[i][j] = 0;        }    }    int tmp1,tmp2;    for(int k=1;k<=K;k++){        scanf("%d %d",&tmp1,&tmp2);        map[tmp1][tmp2] = 1;    }    book[1][1] = 1;    dfs(1,1);    double prob = 1 - (double)mushroomCount / (double)pathCount;    printf("%3.2f",prob);    return 0;}

但是在提交上去的时候老是提示超时。线上无法debug,于是在本地打断点调试。在追踪标记数组的时候,发现对于十几乘十几大小的图,要从起点搜到终点,还没有步数限制,在搜索路径的时候一步步回退查找新的路径,这是十分慢的。看到题目,时间限制是1秒,意味着肯定有其他的思路。

题目说明只能从(i,j+1)和(i+1,j)两个方向走,要求的是到达某点的概率。参加某数字星的算法考试时曾经有一次见过类似的题,当有两条路径都可以到达某点的时候,那么到达该点的概率应该是走这两条路径的概率的和。

举例说明:当图为

1 2 3
4 5 6

要求从1开始走,有两个方向2和4,概率则各为0.5,从2到3,概率为0.5,从3到6概率为1,那么1236的概率为0.5*0.5*1=0.25,而受限于行走方向(只能从(i,j+1)和(i+1,j)两个方向走,不能从(i-1,j)和(i,j-1)走),路线1456的概率为0.5*1*1=0.5,1256的概率为0.5*0.5*1 = 0.25,从1到6的总的概率为1。
现在要求的是从起点到终点后,没有踩到蘑菇的概率。

思路可以转化成这样:
找到

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 燃气费用一直未交怎么办 凌度gps模块无法定位怎么办? 放疗定位线掉了怎么办 被网络平台骗了怎么办 手机重力传感器坏了怎么办 锤子手机重力传感器坏了怎么办 平板电脑没有开关键怎么办 手机重力感应器坏了怎么办 苹果手机重力感应器坏了怎么办 苹果手机陀螺仪坏了怎么办 狗狗的爪子肿了怎么办 压缩文件之后显示拒绝访问怎么办 压缩文件解压后全散开了怎么办 dnf助手改名字用完了怎么办 缅甸 佤邦 办中国护照 怎么办? 电脑玩游戏网络延迟大怎么办 qq好友空间锁了怎么办 卡盟进货额不足怎么办 被朋友骗了钱怎么办 联通在学校网差怎么办 前夫把我微信拉黑 孩子的事怎么办 微信好友验证疑似被盗怎么办 我的世界被banip怎么办 dnf深渊宝珠出了怎么办 吞噬魔4个球吃了怎么办 dnf没有支援兵了怎么办 家里没通天然气怎么办 苹果6p16g不够用怎么办 魅蓝手机内存不够用怎么办 3dmax灯光全黑怎么办 高压15o低压1oo怎么办 源码一位乘法中c怎么办 怀孕搬了重东西怎么办 深蹲力量不涨怎么办 ps4连接显示器分辨率低怎么办 大疆失去链接后怎么办 脑袋被锤了几拳怎么办 华为手机变板砖怎么办 电脑网页打开很慢怎么办 网页加载速度太慢.怎么办 cad字显示不出来怎么办