2018.09.01 hdu4405 Aeroplane chess (期望dp)

本文介绍了一种使用动态规划解决带有捷径的棋盘游戏中,从起点到终点的期望步数问题的方法。通过建立状态转移方程并利用跳转规则简化计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门
期望dp简单题啊。
不过感觉题意不太对。
手过了一遍样例发现如果有捷径必须走。
这样的话就简单了啊。
f[i]f[i]表示从第i个格子出发到第n个格子的期望步数。
显然就可以从f[i+1]~f[i+6]转移过来了,注意如果f下标超过n期望步数都是0。
代码:

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int n,m,jump[N];
double f[N];
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int main(){
    while(scanf("%d%d",&n,&m)){
        if(!n&&!m)break;
        memset(jump,0,sizeof(jump));
        for(int i=1;i<=m;++i){int u=read(),v=read();jump[u]=v;}
        f[n]=0;
        for(int i=n-1;~i;--i){
            f[i]=0;
            if(jump[i]){f[i]=f[jump[i]];continue;}
            for(int j=1;j<=6;++j){
                int k=min(i+j,n);
                f[i]+=f[k];
            }
            f[i]=f[i]/6.0+1;
        }
        printf("%.4lf\n",f[0]);
    }
    return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738322.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值