zoukankan      html  css  js  c++  java
  • POJ 3744:Scout YYF I 概率DP+特征方程+快速幂

    Scout YYF I

    题目链接:

    http://poj.org/problem?id=3744

    题意:

    有个人要到一个叫“mine road”的地方,路线是一条直线,起点在1,路上有N个地雷,坐标在[1, 100000000]之间,这人每次有p(0.25≤p≤0.75)的概率向前走一步,且有1-p的概率向前走两步,问这货安全通过雷区到达"mine road"的概率

    题解:

    利用特征方程求出通项表达式,要走过有雷的地方f(n+1)=f(n-1)*(1-p).   PS:也可以用矩阵快速幂做

                    关于特征方程

    代码

    /*代码略丑 勿喷*/
    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    const int N=15;
    double pow3(double a,long long b)
    {
      if(b==0)return 0;
      double r=1,base=a;
      while(b!=0)
      {
        if(b&1)
        r*=base;
        base*=base;
        b>>=1;
      }
       return r;
    }
    long long a[N],now;
    int main()
    {
      int n;
      double res,a1,a2,r1,r2,c1,c2,p;
      while(~scanf("%d%lf",&n,&p))
      {
        r1=p/2.0-sqrt(1.0-p+p*p/4);
        r2=p/2.0+sqrt(1.0-p+p*p/4);
        for(int i=0;i<n;++i)
        scanf("%lld",&a[i]);
        sort(a,a+n);
        now=1,res=1.0;
        for(int i=0;i<n;++i)
        {
          a1=res,a2=res*p;
          c2=(a1*r1-a2)/(r1*r2-r2*r2);
          c1=(a1-c2*r2)/r1;
          res=(c1*pow3(r1,a[i]-now)+c2*pow3(r2,a[i]-now));
          res*=(1-p);
          now=a[i]+1;
        }
        printf("%.7f
    ",res);
      }
    }
    

      

  • 相关阅读:
    FATFS 初学之 f_open/ f_close
    前端JQuery(二)
    前端JQuery(一)
    8.22MySQL(五)pymysql模块、sql注入问题
    8.21MySQL(四)基本查询语句及方法、连表、子查询
    8.20MySQL(三)外键
    8.19MySQL(二)
    8.16MySQL(一)
    8.15并发编程(四)
    8.14并发编程(三)
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5550659.html
Copyright © 2011-2022 走看看