zoukankan      html  css  js  c++  java
  • hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内。当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数

    0:表示不能到达这个格子

    1:表示左脚跳进这个格子

    2:表示右脚跳进这个格子

    3:随意哪个脚跳进这个格子,而且下一步随意用哪个脚

    dp[i][j] :表示走到第 i 个格子在 j 状态的期望。

    当j=1时,你可以走到dp[i+k][2],dp[i+k][3],

    当j=2时,你可以走到dp[i+k][1],dp[i+k][3],

    当j=3时,你可以走到dp[i+k][2],dp[i+k][3],dp[i+k][1],

    概率dp专题一波走起

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 typedef long long ll;
    13 #define cl(a) memset(a,0,sizeof(a))
    14 #define ts printf("*****
    ");
    15 const int MAXN=1005;
    16 double dp[4004][4];
    17 double p[4004][4];
    18 int main(){
    19     int t,a,b,n;
    20     scanf("%d",&t);
    21     while(t--)
    22     {
    23         scanf("%d%d%d",&n,&a,&b);
    24         for(int i=1;i<=n;i++)
    25             for(int j=0;j<4;j++)
    26                 scanf("%lf",&p[i][j]);
    27         for(int i=n+1;i<=n+a;i++)
    28             for(int j=0;j<4;j++)
    29                 p[i][j]=(j==3);
    30         memset(dp,0,sizeof(dp));
    31         dp[0][3]=1;
    32         for(int i=0;i<=n;i++){
    33             double p1=1,p2=1,p3=1;
    34             for(int j=a;j<=b;j++){
    35                 dp[i+j][2]+=dp[i][1]*p1*p[i+j][2];
    36                 dp[i+j][3]+=dp[i][1]*p1*p[i+j][3];
    37                 p1*=(p[i+j][0]+p[i+j][1]);
    38                 dp[i+j][1]+=dp[i][2]*p2*p[i+j][1];
    39                 dp[i+j][3]+=dp[i][2]*p2*p[i+j][3];
    40                 p2*=(p[i+j][0]+p[i+j][2]);
    41                 dp[i+j][1]+=dp[i][3]*p3*p[i+j][1];
    42                 dp[i+j][2]+=dp[i][3]*p3*p[i+j][2];
    43                 dp[i+j][3]+=dp[i][3]*p3*p[i+j][3];
    44                 p3*=p[i+j][0];
    45             //    cout<<dp[i+j][1]<<" "<<dp[i+j][2]<<" "<<dp[i+j][3]<<endl;
    46             }
    47         }
    48         double ans=0;
    49         for(int i=1;i<=n+a;i++)
    50             for(int j=1;j<4;j++)
    51                 ans+=dp[i][j];
    52         printf("%.8f
    ",ans);
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    JS与Android交互
    win10 死机 无响应
    clientdataset.open 报错 Name not unique in this context
    WIN10 常用bug解决办法
    关闭win10 自动更新 及蓝屏解决办法
    delphi 调用Webservice 引入wsdl 报错 document empty
    C# 类库调试 启动外部程序无法调试
    ADOQuery.Parameters: Property Parameters does not exist
    delphi android 自动升级
    不死僵尸木马lpt7.asp.asp与lpt5.cnzzz.asp的删除方法
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4713508.html
Copyright © 2011-2022 走看看