HDU 4649 Professor Tian(DP)
暴力水过的,比赛的时候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)的更多相关文章
- HDU 4649 Professor Tian (概率DP)
Professor Tian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- HDU 4649 Professor Tian
Professor Tian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) T ...
- hdu 4649 Professor Tian 反状态压缩+概率DP
思路:反状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就 ...
- HDU 4649 Professor Tian(概率DP)题解
题意:一个表达式,n + 1个数,n个操作,每个操作Oi和数Ai+1对应,给出每个操作Oi和数Ai+1消失的概率,给出最后表达式值得期望.只有| , ^,&三个位操作 思路:显然位操作只对当前 ...
- HDU 4649 Professor Tian(反状态压缩dp,概率)
本文出自 http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一 ...
- hdu 4649 Professor Tian 多校联合训练的题
这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作 即 或 ,与 ,和异或 | & ^ )这样依次把操作符插入整 ...
- HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)
不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了 为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需 ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- html 构建响应式网站之viewport的使用
在网页代码的头部,加入一行viewport元标签 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 【Other】千字文 硬笔 楷书 字帖
<千字文>是我国最优秀的一篇训蒙教材,用一千个汉字勾划出一部完整的中国文化史的基本轮廓,代表了中国传统教育启蒙阶段的最高水平.<千字文>通篇首尾连贯,音韵谐美,读起来朗朗上口, ...
- JavaScript Math 对象方法
Math 对象方法 方法 描述 abs(x) 返回数的绝对值. acos(x) 返回数的反余弦值. asin(x) 返回数的反正弦值. atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值 ...
- Subarray Sum & Maximum Size Subarray Sum Equals K
Subarray Sum Given an integer array, find a subarray where the sum of numbers is zero. Your code sho ...
- Unique Binary Search Trees I & II
Given n, how many structurally unique BSTs (binary search trees) that store values 1...n? Example Gi ...
- Java for LeetCode 169 Majority Element
Given an array of size n, find the majority element. The majority element is the element that appear ...
- codeforces B. Jeff and Periods 解题报告
题目链接:http://codeforces.com/problemset/problem/352/B 题目意思:给出一个长度为n的序列 a1, a2, ..., an(序号i,1 <= i ...
- 【好用的小技巧】win8兼容、网页不让复制
1.今天下了个matlab7,我用的是win8系统,不兼容. 解决:鼠标右键matlab7的快捷键,点击属性,选择兼容性,选择window vista即可运行 2.在一个 网页上看到一个对自己很有帮助 ...
- 使用webstorm操作git
0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...
- SQL Server 2012 OFFSET/FETCH NEXT分页示例(转载)
原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-sid ...