zoukankan      html  css  js  c++  java
  • HDU 4649 Professor Tian(DP)

    题目链接

    暴力水过的,比赛的时候T了两次,优化一下初始化,终于水过了。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <string>
     4 #include <algorithm>
     5 using namespace std;
     6 #define MOD 1000000007
     7 #define LL __int64
     8 double dp[2][1<<20];
     9 int que[1<<20];
    10 int flag[1<<20];
    11 double o[250];
    12 char str[250];
    13 int p[250];
    14 int judge(char s)
    15 {
    16     if(s == '^')
    17     return 1;
    18     else if(s == '&')
    19     return 2;
    20     else if(s == '|')
    21     return 3;
    22     return 1;
    23 }
    24 int main()
    25 {
    26     int n,cas = 1,i,j,x,t1,t2,num,tnum;
    27     while(scanf("%d",&n)!=EOF)
    28     {
    29         scanf("%d",&x);
    30         for(i = 1;i <= n;i ++)
    31         scanf("%d%*c",&p[i]);
    32         for(i = 1;i <= n;i ++)
    33         scanf("%c%*c",&str[i]);
    34         for(i = 1;i <= n;i ++)
    35         scanf("%lf",&o[i]);
    36         flag[x] = 1;
    37         num = 1;
    38         que[1] = x;
    39         dp[0][x] = 1.0;
    40         t1 = 0;t2 = 1;
    41         for(i = 1;i <= n;i ++)
    42         {
    43             tnum = num;
    44             for(j = 1;j <= num;j ++)
    45             {
    46                 dp[t2][que[j]] += dp[t1][que[j]]*o[i];
    47                 int temp,z = judge(str[i]);
    48                 if( z == 1)
    49                 {
    50                     temp = que[j]^p[i];
    51                     if(!flag[temp])
    52                     {
    53                         flag[temp] = 1;
    54                         que[++tnum] = temp;
    55                     }
    56                     dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
    57                 }
    58                 else  if(z == 2)
    59                 {
    60                     temp = que[j]&p[i];
    61                     if(!flag[temp])
    62                     {
    63                         flag[temp] = 1;
    64                         que[++tnum] = temp;
    65                     }
    66                     dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
    67                 }
    68                 else
    69                 {
    70                     temp = que[j]|p[i];
    71                     if(!flag[temp])
    72                     {
    73                         flag[temp] = 1;
    74                         que[++tnum] = temp;
    75                     }
    76                     dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
    77                 }
    78             }
    79             num = tnum;
    80             swap(t2,t1);
    81             for(j = 1;j <= num;j ++)
    82             dp[t2][que[j]] = 0.0;
    83         }
    84         double ans = 0;
    85         for(i = 1;i <= num;i ++)
    86         {
    87             ans += que[i]*dp[t1][que[i]];
    88             flag[que[i]] = 0;
    89             dp[t1][que[i]] = 0.0;
    90         }
    91         printf("Case %d:
    %.6f
    ",cas++,ans);
    92     }
    93     return 0;
    94 }
  • 相关阅读:
    MongoDB 安装及其配置
    hdu 1241 Oil Deposits
    2014ACM/ICPC亚洲区北京站
    hdu 5901 count prime & code vs 3223 素数密度
    hdu 2191 珍惜现在,感恩生活
    FOJ 2181 快来买肉松饼
    hdu 5384 Danganronpa
    hdu 2222 Keywords Search
    hdu 1300 Pearls
    2016.2.24. 《构建之法》开始阅读
  • 原文地址:https://www.cnblogs.com/naix-x/p/3241460.html
Copyright © 2011-2022 走看看