题目链接

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

 #include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
#define MOD 1000000007
#define LL __int64
double dp[][<<];
int que[<<];
int flag[<<];
double o[];
char str[];
int p[];
int judge(char s)
{
if(s == '^')
return ;
else if(s == '&')
return ;
else if(s == '|')
return ;
return ;
}
int main()
{
int n,cas = ,i,j,x,t1,t2,num,tnum;
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&x);
for(i = ;i <= n;i ++)
scanf("%d%*c",&p[i]);
for(i = ;i <= n;i ++)
scanf("%c%*c",&str[i]);
for(i = ;i <= n;i ++)
scanf("%lf",&o[i]);
flag[x] = ;
num = ;
que[] = x;
dp[][x] = 1.0;
t1 = ;t2 = ;
for(i = ;i <= n;i ++)
{
tnum = num;
for(j = ;j <= num;j ++)
{
dp[t2][que[j]] += dp[t1][que[j]]*o[i];
int temp,z = judge(str[i]);
if( z == )
{
temp = que[j]^p[i];
if(!flag[temp])
{
flag[temp] = ;
que[++tnum] = temp;
}
dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
}
else if(z == )
{
temp = que[j]&p[i];
if(!flag[temp])
{
flag[temp] = ;
que[++tnum] = temp;
}
dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
}
else
{
temp = que[j]|p[i];
if(!flag[temp])
{
flag[temp] = ;
que[++tnum] = temp;
}
dp[t2][temp] += dp[t1][que[j]]*(1.0-o[i]);
}
}
num = tnum;
swap(t2,t1);
for(j = ;j <= num;j ++)
dp[t2][que[j]] = 0.0;
}
double ans = ;
for(i = ;i <= num;i ++)
{
ans += que[i]*dp[t1][que[i]];
flag[que[i]] = ;
dp[t1][que[i]] = 0.0;
}
printf("Case %d:\n%.6f\n",cas++,ans);
}
return ;
}

HDU 4649 Professor Tian(DP)的更多相关文章

  1. HDU 4649 Professor Tian (概率DP)

    Professor Tian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  2. HDU 4649 Professor Tian

    Professor Tian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T ...

  3. hdu 4649 Professor Tian 反状态压缩+概率DP

    思路:反状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就 ...

  4. HDU 4649 Professor Tian(概率DP)题解

    题意:一个表达式,n + 1个数,n个操作,每个操作Oi和数Ai+1对应,给出每个操作Oi和数Ai+1消失的概率,给出最后表达式值得期望.只有| , ^,&三个位操作 思路:显然位操作只对当前 ...

  5. HDU 4649 Professor Tian(反状态压缩dp,概率)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一 ...

  6. hdu 4649 Professor Tian 多校联合训练的题

    这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作  即  或 ,与 ,和异或 |   &  ^ )这样依次把操作符插入整 ...

  7. HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)

    不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了 为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需 ...

  8. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  9. hdu 2296 aC自动机+dp(得到价值最大的字符串)

    Ring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Lucas的数论(math)

    Lucas的数论(math) 题目描述 去年的今日,Lucas仍然是一个热爱数学的孩子.(现在已经变成业界毒瘤了> <) 在整理以前的试题时,他发现了这么一道题目:求\(\sum\limi ...

  2. OI 中的 FFT

    不行啊最近备考简直变成文化狗了= =..我还脑洞大开想学俄语什么心态.. 简单地说一下FFT(来,跟我一起念,法〰法〜塔,法斯特~福铝页~圈死佛而母).. FFT本来是做信号变换用的,当然OI和信号变 ...

  3. codeforces 486C. Palindrome Transformation 解题报告

    题目链接:http://codeforces.com/problemset/problem/486/C 题目意思:给出一个含有 n 个小写字母的字符串 s 和指针初始化的位置(指向s的某个字符).可以 ...

  4. linux下emacs配置文件

    1:安装.在ubuntu下使用命令 sudo apt-get install emacs,即可,我使用的是ubuntu的10.04的版本,在里面使用了据说是163的2个源. 1.1:如何更新快速的源, ...

  5. java代码获取jdbc链接properties

    public static String getDirPath() { Resource resource = null; Properties props = null; String driver ...

  6. Servlet过滤器和监听器

    1,Servlet过滤器 <filter> <filter-name>charset</filter-name> <filter-class>org.g ...

  7. QQ图片名字

    ﻩ并亲了你一下ﻩ大兔子҉҉大兔子҉҉҉҉҉҉҉҉

  8. 一箭双雕打开Genesis

    打开记事本,将如下内容填入,保存时将后缀名改为bat @ ECHO 正在清理垃圾文件...del C:\tmp\*.* /f /q@ ECHO 清理完毕@ ECHO OFF@ ECHO.@ ECHO. ...

  9. php 面向对象要点汇总

    //类和对象//对象:一切东西都可以看做对象,对象是类的实例化.//类:类是对象的抽象,用来描述众多对象共有的特征. //定义类 class//成员变量 和 成员方法//访问修饰符 public共有的 ...

  10. PIGOSS

    http://blog.sina.com.cn/s/blog_865bc4c60102wkb1.html