zoukankan      html  css  js  c++  java
  • 2017 ICPC Shenyang H

    只有恶心人的大模拟才会让懒人写博客。。。

    挂着概率DP名字的模拟(

    很容易想到dp[i][j][k][l][t][0,1,2]表示主公忠臣反贼内奸的血量,轮到t行动,三方势力分别的胜率

    转移过程比较繁琐,看到网上基本上是DFS写的。这里提供一个循环的写法。

    特别注意:这道题目一定要输出6位。

    代码如下:

      1 #include<iostream>
      2 #include<stdio.h>
      3 using namespace std;
      4 double dp[40][40][40][40][4][3],maxx;
      5 int i,j,k,l,cnt,h1,h2,h3,h4,tt,t;
      6 int main()
      7 {
      8     //主公忠臣胜利
      9     for (i=1;i<40;i++)
     10     {
     11         for (j=0;j<40;j++)
     12         {
     13             for (t=0;t<4;t++)
     14             {
     15                 dp[i][j][0][0][t][0]=1;
     16                 dp[i][j][0][0][t][1]=0;
     17                 dp[i][j][0][0][t][2]=0;
     18             }
     19         }
     20     }
     21     //反贼胜利
     22     for (j=0;j<40;j++)
     23     for (k=0;k<40;k++)
     24     for (l=0;l<40;l++)
     25     for (t=0;t<4;t++)
     26     {
     27         dp[0][j][k][l][t][0]=0;
     28         dp[0][j][k][l][t][1]=1;
     29         dp[0][j][k][l][t][2]=0;
     30     }
     31     //内奸胜利 
     32     for (l=1;l<40;l++)
     33     {
     34         for (t=0;t<4;t++)
     35         {
     36             dp[0][0][0][l][t][0]=0;
     37             dp[0][0][0][l][t][1]=0;
     38             dp[0][0][0][l][t][2]=1;
     39         }
     40     }
     41     for (i=0;i<40;i++)
     42     for (j=0;j<40;j++)
     43     for (k=0;k<40;k++)
     44     for (l=0;l<40;l++)
     45     {
     46         if (((i==0)+(j==0)+(k==0)+(l==0))>=3) continue;
     47         if (i==0) continue;
     48         if (k+l==0) continue;
     49         //t=0;
     50         if (k>0)     
     51         {
     52             dp[i][j][k][l][0][0]=dp[i][j][k-1][l][1][0];                
     53             dp[i][j][k][l][0][1]=dp[i][j][k-1][l][1][1];
     54             dp[i][j][k][l][0][2]=dp[i][j][k-1][l][1][2];
     55         }
     56         if (l>0)
     57         {
     58             if (k<=0||dp[i][j][k][l-1][1][0]>dp[i][j][k][l][0][0])
     59             {
     60                 dp[i][j][k][l][0][0]=dp[i][j][k][l-1][1][0];
     61                 dp[i][j][k][l][0][1]=dp[i][j][k][l-1][1][1];
     62                 dp[i][j][k][l][0][2]=dp[i][j][k][l-1][1][2];
     63             }
     64             else if (k>0&&dp[i][j][k][l-1][1][0]==dp[i][j][k][l][0][0])
     65             {
     66                 dp[i][j][k][l][0][0]=(dp[i][j][k][l-1][1][0]+dp[i][j][k][l][0][0])/2;
     67                 dp[i][j][k][l][0][1]=(dp[i][j][k][l-1][1][1]+dp[i][j][k][l][0][1])/2;
     68                 dp[i][j][k][l][0][2]=(dp[i][j][k][l-1][1][2]+dp[i][j][k][l][0][2])/2;
     69             }
     70         }
     71         //t=3;
     72         if (l==0)
     73         {
     74             dp[i][j][k][l][3][0]=dp[i][j][k][l][0][0];
     75             dp[i][j][k][l][3][1]=dp[i][j][k][l][0][1];
     76             dp[i][j][k][l][3][2]=dp[i][j][k][l][0][2];
     77         }
     78         else
     79         {
     80             maxx=0;
     81             cnt=0;
     82             if (i>0) if (dp[i-1][j][k][l][0][2]>maxx) maxx=dp[i-1][j][k][l][0][2];
     83             if (j>0) if (dp[i][j-1][k][l][0][2]>maxx) maxx=dp[i][j-1][k][l][0][2];
     84             if (k>0) if (dp[i][j][k-1][l][0][2]>maxx) maxx=dp[i][j][k-1][l][0][2];
     85             if (i>0) if (dp[i-1][j][k][l][0][2]==maxx) 
     86             {
     87                 cnt++;
     88                 dp[i][j][k][l][3][0]+=dp[i-1][j][k][l][0][0];
     89                 dp[i][j][k][l][3][1]+=dp[i-1][j][k][l][0][1];
     90                 dp[i][j][k][l][3][2]+=dp[i-1][j][k][l][0][2];
     91             }
     92             if (j>0) if (dp[i][j-1][k][l][0][2]==maxx) 
     93             {
     94                 cnt++;
     95                 dp[i][j][k][l][3][0]+=dp[i][j-1][k][l][0][0];
     96                 dp[i][j][k][l][3][1]+=dp[i][j-1][k][l][0][1];
     97                 dp[i][j][k][l][3][2]+=dp[i][j-1][k][l][0][2];
     98             }
     99             if (k>0) if (dp[i][j][k-1][l][0][2]==maxx) 
    100             {
    101                 cnt++;
    102                 dp[i][j][k][l][3][0]+=dp[i][j][k-1][l][0][0];
    103                 dp[i][j][k][l][3][1]+=dp[i][j][k-1][l][0][1];
    104                 dp[i][j][k][l][3][2]+=dp[i][j][k-1][l][0][2];
    105             }
    106             dp[i][j][k][l][3][0]=dp[i][j][k][l][3][0]/cnt;
    107             dp[i][j][k][l][3][1]=dp[i][j][k][l][3][1]/cnt;
    108             dp[i][j][k][l][3][2]=dp[i][j][k][l][3][2]/cnt;
    109         }
    110         //t=2;
    111         if (j==0)
    112         {
    113             dp[i][j][k][l][2][0]=dp[i][j][k][l][3][0];
    114             dp[i][j][k][l][2][1]=dp[i][j][k][l][3][1];
    115             dp[i][j][k][l][2][2]=dp[i][j][k][l][3][2];
    116         }
    117         else
    118         {
    119             if (k>0)     
    120             {
    121                 dp[i][j][k][l][2][0]=dp[i][j][k-1][l][3][0];                
    122                 dp[i][j][k][l][2][1]=dp[i][j][k-1][l][3][1];
    123                 dp[i][j][k][l][2][2]=dp[i][j][k-1][l][3][2];
    124             }
    125             if (l>0)
    126             {
    127                 if (k<=0||dp[i][j][k][l-1][3][0]>dp[i][j][k][l][2][0])
    128                 {
    129                     dp[i][j][k][l][2][0]=dp[i][j][k][l-1][3][0];
    130                     dp[i][j][k][l][2][1]=dp[i][j][k][l-1][3][1];
    131                     dp[i][j][k][l][2][2]=dp[i][j][k][l-1][3][2];
    132                 }
    133                 else if (k>0&&dp[i][j][k][l-1][3][0]==dp[i][j][k][l][2][0])
    134                 {
    135                     dp[i][j][k][l][2][0]=(dp[i][j][k][l-1][3][0]+dp[i][j][k][l][2][0])/2;
    136                     dp[i][j][k][l][2][1]=(dp[i][j][k][l-1][3][1]+dp[i][j][k][l][2][1])/2;
    137                     dp[i][j][k][l][2][2]=(dp[i][j][k][l-1][3][2]+dp[i][j][k][l][2][2])/2;
    138                 }
    139             }
    140         }
    141         //t=1;
    142         if (k==0)
    143         {
    144             dp[i][j][k][l][1][0]=dp[i][j][k][l][2][0];
    145             dp[i][j][k][l][1][1]=dp[i][j][k][l][2][1];
    146             dp[i][j][k][l][1][2]=dp[i][j][k][l][2][2];
    147         }
    148         else
    149         {
    150             maxx=0;
    151             cnt=0;
    152             if (i>0) if (dp[i-1][j][k][l][2][1]>maxx) maxx=dp[i-1][j][k][l][2][1];
    153             if (j>0) if (dp[i][j-1][k][l][2][1]>maxx) maxx=dp[i][j-1][k][l][2][1];
    154             if (l>0) if (dp[i][j][k][l-1][2][1]>maxx) maxx=dp[i][j][k][l-1][2][1];
    155             if (i>0) if (dp[i-1][j][k][l][2][1]==maxx)
    156             {
    157                 cnt++;
    158                 dp[i][j][k][l][1][0]+=dp[i-1][j][k][l][2][0];
    159                 dp[i][j][k][l][1][1]+=dp[i-1][j][k][l][2][1];
    160                 dp[i][j][k][l][1][2]+=dp[i-1][j][k][l][2][2];
    161             }
    162             if (j>0) if (dp[i][j-1][k][l][2][1]==maxx)
    163             {
    164                 cnt++;
    165                 dp[i][j][k][l][1][0]+=dp[i][j-1][k][l][2][0];
    166                 dp[i][j][k][l][1][1]+=dp[i][j-1][k][l][2][1];
    167                 dp[i][j][k][l][1][2]+=dp[i][j-1][k][l][2][2];
    168             }
    169             if (l>0) if (dp[i][j][k][l-1][2][1]==maxx)
    170             {
    171                 cnt++;
    172                 dp[i][j][k][l][1][0]+=dp[i][j][k][l-1][2][0];
    173                 dp[i][j][k][l][1][1]+=dp[i][j][k][l-1][2][1];
    174                 dp[i][j][k][l][1][2]+=dp[i][j][k][l-1][2][2];
    175             }
    176             dp[i][j][k][l][1][0]=dp[i][j][k][l][1][0]/cnt;
    177             dp[i][j][k][l][1][1]=dp[i][j][k][l][1][1]/cnt;
    178             dp[i][j][k][l][1][2]=dp[i][j][k][l][1][2]/cnt;
    179         }
    180     }
    181     scanf("%d",&tt);
    182     while (tt--)
    183     {
    184         scanf("%d%d%d%d",&h1,&h2,&h3,&h4);
    185         printf("%.6lf %.6lf %.6lf
    ",dp[h1][h2][h3][h4][0][0],dp[h1][h2][h3][h4][0][1],dp[h1][h2][h3][h4][0][2]);
    186     }
    187     return 0;
    188 }
    View Code of H
  • 相关阅读:
    为什么nhibernate 不能保存ontomany的结构
    如何使用 Mmcv.exe 工具来管理群集消息队列资源[转]
    Building an MSMQ Cluster[转]
    XmlSerializerFactory Is Pretty Cool[转]
    Processing Binary Documents Through BizTalk Via Web Services[转]
    获取数据字典
    Using XPaths in Message Assignment[转]
    MSMQ突破4M限制的方法
    XmlSerializerFactory Is Pretty Cool[转]
    BizTalk自定义证书加密/解密pipeline组件开发
  • 原文地址:https://www.cnblogs.com/idyllic/p/14019490.html
Copyright © 2011-2022 走看看