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 ...
随机推荐
- 解决Cannot change version of project facet Dynamic web module to 3.0
我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...
- iOS 定义圆角控件
ios7 以前,想把UILabel变为圆角的,只需要设置layer的 cornerRadius属性,ios7以后,还需要设置 masksToBounds = true. 以下是这个属性的说明 A Bo ...
- Java中Set集合的使用
除了List之外,Set集合接口也经常使用,Set接口中存放的元素是无序的并且是不可重复的,因此被称为数据集: Set接口因为是无序的,所以没有提供像List一样的set方法来修改元素,查找,添加.删 ...
- WordPress前台后台页面打开慢的解决方法
写个人网站用WordPress程序是一个不错的选择,但是目前安装之后速度很慢,后台配置页面半天打不开,在网上查了一下原来是Google被墙导致,WordPress默认模板会加载谷歌的open-sans ...
- discuz 学习
一.Discuz首页“今日”“昨日”“欢迎新会员”等文字删除添加 搜索templeta/default/forum/discuz.htm (使用非默认模版的请修改当前使用模版的discuz.htm ...
- Ajax案例(使用ajax进行加法运算)
此案例功能实现了一边看视频一边进行加法运算,而加法运算时页面不会刷新请求 ajax代码: <script type="text/javascript" src="j ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- cVim—Chrome上更强大的vim插件
cVim——Chrome上更强大的vim插件 介绍 也许很多人在chrome上都用过类似Vimium, ViChrome的插件,这些插件的目的都差不多,就是在浏览器中提供一些类似vim的操作来提高效率 ...
- cocos2dx实现象棋之运动
1.头文件 void moveStone(int moveid, int killid, int x, int y); void moveComplete(CCNode*, void*); bool ...
- jdk
mkdir java mv jdk1.7.0_71/ java/ [root@centos02 src]# java -version java version "1.7.0_71" ...