dp期望之网格游戏

在这里插入图片描述
有一个游戏平板上面有n×m个格子,一开始每个格子都是关闭的,每个格子里面都有一个标记
已知每种标记恰好出现两次,也就是一共有n*m/2种标记
规定一次移动为依次(one by one不是同时)打开一对格子查看里面的标记,如果标记不一样,格子会自动关闭,但是你的记忆是超强了,看过了就不会忘,如果标记是一样的,格子从此就一直保持打开状态,当所有格子都打开时游戏结束
请算出游戏结束的最少期望步数
首先设dp[i][j]表示i个打开了,j个没打开的期望.然后就是转移了.

dp是由已知向未知转移的.那么,我们怎么转移呢?众所周知转移是凭借两个for
而转移的for是根据dp方程来的,所以我们来列一下dp方程.
好,我们肯定是要开箱子了,即dp[i][j]…
dp[i][j]<-怎么转移…
我们需要开两个箱子,开出来的两个箱子有4种情况…
第一种,我打开的这两张,我第一张之前翻开过,那么我下一张肯定是翻我之前的那张.
显然,我翻到这种的可能性是p=i/j.然后这样dp[i][j]=(dp[i-1][j-1]+1)p.
第二种,我打开的这两张,第一张无对应,然后开第二张,1,2对应.
在i+j中翻一张牌,第一张不对应的可能性是1-p,然后1,2对应的可能性是a=1/(j-1).因为一定有两张对应,这样的dp就是.
dp[i][j]+=(1-p)
(a*(dp[i][j-2]+1)).//注意i记录打开了但是没被消除的.
第三种,我打开的两张,第一张无对应,然后开第二张,1,2不对应,且2与已知无对应.
第一张无对应就是(1-p),第二张和第一张和已知不对应的概率是b=((j-1)-1-i)/(j-1)=(j-2-i)/(j-1).
dp[i][j]+=(1-p)(b(dp[i+2][j-2]+1)).
第四种,我打开的两张,第一张无对应,然后开第二张,1,2不对应,且2与已知对应.
第一张无对应就是(1-p),第二张和第一张不对应但和已知对应的概率c=1-a-b.
dp[i][j]+=(1-p)(c(dp[i][j-2]+2)).
观察i,j的大小,j放第一维,i放第二维是可以的.因为i+2>i,不可能把i放第一维的.

#include <bits/stdc++.h>
using namespace std;
const int N=2505;
double dp[N][N];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    n*=m;
    for(int j=0;j<=n;j++)
    {
        for(int i=0;i<=n;i++)
        {
            if(i+j>n||(j-i)%2||i>j) continue;//越界不合法的删除
            double p=(double)i/(double)j;
            if(i>0&&j>0) dp[i][j]=(dp[i-1][j-1]+1.0)*p;
            if(j>1)
            {
                double a=1.0/(double)(j-1.0);
                double b=(double)(j-2-i)/(double)(j-1);
                double c=1.0-a-b;
                dp[i][j]+=(1.0-p)*(a*(dp[i][j-2]+1.0));
                dp[i][j]+=(1.0-p)*(b*(dp[i+2][j-2]+1.0));
                dp[i][j]+=(1.0-p)*(c*(dp[i][j-2]+2.0));
            }
        }
    }
    printf("%.15f\n",dp[0][n]);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
期望dp和概率dp是两种不同的动态规划方法。 期望dp是指通过计算每个状态的期望值来求解最终的期望。在期望dp中,我们通常定义dp\[i\]表示在第i个状态时的期望值,然后通过状态转移方程来更新dp数组,最终得到最终状态的期望值。期望dp通常用于求解期望问题,例如求解骰子的期望点数、求解抽奖的期望次数等。 概率dp是指通过计算每个状态的概率来求解最终的概率。在概率dp中,我们通常定义dp\[i\]表示在第i个状态时的概率,然后通过状态转移方程来更新dp数组,最终得到最终状态的概率。概率dp通常用于求解概率问题,例如求解抛硬币出现正面的概率、求解从一副牌中抽到红心的概率等。 总结来说,期望dp和概率dp的区别在于它们所计算的是不同的值,期望dp计算的是期望值,而概率dp计算的是概率值。 #### 引用[.reference_title] - *1* [概率/期望dp专题](https://blog.csdn.net/qq_34416123/article/details/126585094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【动态规划】数学期望/概率DP/期望DP详解](https://blog.csdn.net/weixin_45697774/article/details/104274160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值