zoukankan      html  css  js  c++  java
  • HDU3853

    Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl).

    Homura wants to help her friend Madoka save the world. But because of the plot of the Boss Incubator, she is trapped in a labyrinth called LOOPS.


    The planform of the LOOPS is a rectangle of R*C grids. There is a portal in each grid except the exit grid. It costs Homura 2 magic power to use a portal once. The portal in a grid G(r, c) will send Homura to the grid below G (grid(r+1, c)), the grid on the right of G (grid(r, c+1)), or even G itself at respective probability (How evil the Boss Incubator is)!
    At the beginning Homura is in the top left corner of the LOOPS ((1, 1)), and the exit of the labyrinth is in the bottom right corner ((R, C)). Given the probability of transmissions of each portal, your task is help poor Homura calculate the EXPECT magic power she need to escape from the LOOPS.

    裸的期望DP

    dp[i[j]表示当前在i,j位置,到达终点的期望

    我们不难看出转移方程为

    $dp[i][j]=dp[i][j]*p0+dp[i][j+1]*p1+dp[i+1][j]*p2$

    解这个式子有两种方法

    1.高斯消元

    2.把右边的$dp[i][j]$除到左边

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cmath>
     6 using namespace std;
     7 const int MAXN=2001;
     8 const int INF=0x7fffff;
     9 double dp[MAXN][MAXN];//走到i,j的期望 
    10 struct node
    11 {
    12     double a,b,c;
    13     void clear(){a=b=c=0.0;}
    14 }map[MAXN][MAXN];
    15 int n,m;
    16 const double eps=1e-5;
    17 int main()
    18 {
    19     dp[n][m]=0;
    20     while(scanf("%d%d",&n,&m)!=EOF)
    21     {
    22         memset(dp,0.00,sizeof(dp));
    23         dp[n][m]=0;
    24         for(int i=1;i<=n;i++)
    25             for(int j=1;j<=m;j++)
    26                 map[i][j].clear();
    27         for(int i=1;i<=n;i++)
    28             for(int j=1;j<=m;j++)
    29                 scanf("%lf%lf%lf",&map[i][j].a,&map[i][j].b,&map[i][j].c);
    30         for(int i=n;i>=1;i--)
    31             for(int j=m;j>=1;j--)
    32             {
    33                 if(i==n&&j==m)    continue;
    34                 if(fabs(1.00-map[i][j].a)<eps)    continue;
    35                 dp[i][j]=(map[i][j].b*dp[i][j+1]+map[i][j].c*dp[i+1][j]+2.00)/(1.0-map[i][j].a);
    36             }    
    37         printf("%.3lf
    ",dp[1][1]);
    38     }
    39     
    40     
    41     return 0;
    42 }
  • 相关阅读:
    训练赛(28)—— 计蒜客 45724 Jumping Frog
    训练赛(28)—— 计蒜客 45725 Fujiyama Thursday
    centos上libreoffice+unoconv安装步骤,实现word转pdf
    PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
    knockout应用开发指南(完整版)
    git 创建版本库
    保留json字符串中文的函数,代替json_encode
    微信公众平台开发接口PHP SDK完整版(转载)
    find_in_set()
    NuSOAP与PHPRPC比较(转)
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7786984.html
Copyright © 2011-2022 走看看