HDU 4405 Aeroplane chess(12年金华网络赛-期望DP)

本文探讨了一种独特的路径选择问题,玩家从初始位置出发,通过掷骰子前进或利用飞行道具跳过格子,目标是达到特定位置。文章详细阐述了如何使用动态规划方法来计算完成此目标所需的平均掷骰子次数。
部署运行你感兴趣的模型镜像

题目链接:Click here~~

题意:

有一排 n+1 个格子,编号 0~n ,有些格子可以坐飞机向前飞,飞到某个指定的格子。

然后从0出发,每次掷个骰子(1~6点),然后走对应的步数,若走到有飞机的地方,则飞过去。否则,掷骰子。

问走到编号为n的格子或者走到它后面的关于掷骰子次数的期望是多少。

解题思路:

设 P[i] 表示到达格子 i 的概率,E[i] 表示到达格子 i 掷骰子次数的期望。


首先,对于到达格子 i 这一事件,只有两种可能:坐飞机过来的 or 掷骰子过来的。

若它是从格子 k 坐飞机过来的,则 P[i]1 = P[k]。

若它是从格子 k 掷骰子过来的,则 P[i]2 = P[k] * 1/6 ( i-6 <= k <= i-1)。

即 P[i] 等于上述两种情况的概率和。


设掷骰子次数为 t ,则 E[i] = sum{t * P[i] * p(i,t)}。(p(i,t) 表示到达格子 i 的条件下掷骰子次数为 t 的概率)

若它是从格子 k 坐飞机过来的,则 p(i,t) = p(k,t) ,又 P[i]1 = P[k],从而 E[i]1 = E[k]。

若它是从格子 k 掷骰子过来的,则 p(i,t) = p(k,t-1),又 P[i]2 = P[k] * 1/6,

则 E[i] = 1/6 * sum{(t-1) * P[k] * p(k,t-1)} + 1/6 * P[k] * sum{ p(k,t-1) } ,从而E[i]2 = 1/6 * ( E[k] + P[k] )。

同理 E[i] 等于上述两种情况的期望和。


如此,便可从前向后递推求解。

#include <stdio.h>
#include <string.h>

#define N 100010

const double p = 1.0/6;

struct TT
{
    double E,P;
    int next;
}a[N];

int main()
{
    int n,m,x,y;
    while(scanf("%d%d",&n,&m),n+m)
    {
        memset(a,0,sizeof(a));
        while(m--)
        {
            scanf("%d%d",&x,&y);
            a[x].next = y;
        }
        a[0].E = 0 , a[0].P = 1;
        for(int i=0;i<n;i++)
        {
            if(a[i].next)
            {
                a[ a[i].next ].E += a[i].E;
                a[ a[i].next ].P += a[i].P;
            }
            else
                for(int j=1;j<=6;j++)
                {
                    a[i+j].E += p * (a[i].E + a[i].P);
                    a[i+j].P += p * a[i].P;
                }
        }
        double ans = 0;
        for(int i=0;i<=5;i++)
            ans += a[n+i].E;
        printf("%.4f\n",ans);
    }
    return 0;
}


您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

内容概要:本文提出了一种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值