Scout YYF I POJ - 矩阵快速幂+概率DP

本文介绍了一种使用动态规划和矩阵快速幂的方法来计算通过雷区的不踩雷概率。通过将问题转化为在特定区间内求解不踩雷概率的递推公式,并利用矩阵快速幂加速计算,实现了高效求解。文章详细展示了算法实现过程,包括数据结构定义、关键函数设计及主函数流程。

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

  • Scout YYF I

  •  POJ - 3744 
  •  dp[i]=p∗dp[i−1]+(1−p)∗dp[i−2].在每一段上按照这个公式递推
  • 然后转化为在每段区间上求解不踩雷的概率划分依据是1-a[0], a[0]+1-a[1],按照雷区进行划分
  • 在每个区间上以在第一个位置个概率为1.0进行递推在a[i]上的之为踩雷的概率所以最终把每一段的1-a[i]相乘就是总的概率
  • 注意:memcpy必须数组大小完全一致进行复制,
  • #include<iostream>
    #include<cstring>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int n,a[33];
    double p,ans;
    struct node
    {
        double f[2][2];
    } base;
    node mul(node a,node b)
    {
        node c;
        for(int i=0; i<2; i++)
            for(int j=0; j<2; j++)
            {
                c.f[i][j]=0;
                for(int k=0; k<2; k++)
                    c.f[i][j]+=a.f[i][k]*b.f[k][j];
            }
        return c;
    }
    node qpow(node x,int b)
    {
        node s;
        memset(s.f,0,sizeof(s.f));
        for(int i=0; i<2; i++)
            s.f[i][i]=1.0;
        while(b)
        {
            if(b&1)
                s=mul(s,x);
            x=mul(x,x);
            b=b>>1;
        }
        return s;
    }
    int main()
    {
        while(scanf("%d %lf",&n,&p)!=EOF)
        {
            ans=1.0;
            for(int i=0; i<n; i++)
                scanf("%d",&a[i]);
            sort(a,a+n);
            double b[2][2]= {{p,1-p},{1,0}};
            memcpy(base.f,b,sizeof(b));
            node temp=qpow(base,a[0]-1);
            ans*=(1-temp.f[0][0]);
            for(int i=1; i<n; i++)
            {
                if(a[i]==a[i-1])continue;
                temp=qpow(base,a[i]-a[i-1]-1);
                ans*=(1-temp.f[0][0]);
            }
            printf("%.7lf\n",ans);
        }
        return 0;
    }
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值