hdu 4849 Professor Tian(dp)
来源:互联网 发布:java中格式化 编辑:程序博客网 时间:2024/06/03 12:31
题目链接:hdu 4849 Professor Tian
解题思路
将20位分开考虑,考虑最后为1的概率。
代码
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int maxn = 205;double P[maxn], dp[maxn][2];int N, A[maxn];char sig[maxn][2];double solve (int bit, double s) { dp[0][0] = 1 - s, dp[0][1] = s; for (int i = 1; i <= N; i++) { for (int j = 0; j < 2; j++) dp[i][j] = dp[i-1][j] * P[i]; double p = 1 - P[i]; int v = (A[i]>>bit)&1; if (sig[i][0] == '&') { dp[i][v&0] += dp[i-1][0] * p; dp[i][v&1] += dp[i-1][1] * p; } else if (sig[i][0] == '|') { dp[i][v|0] += dp[i-1][0] * p; dp[i][v|1] += dp[i-1][1] * p; } else { dp[i][v^0] += dp[i-1][0] * p; dp[i][v^1] += dp[i-1][1] * p; } } return dp[N][1];}int main () { int cas = 1, s; while (scanf("%d", &N) == 1) { scanf("%d", &s); for (int i = 1; i <= N; i++) scanf("%d", &A[i]); for (int i = 1; i <= N; i++) scanf("%s", sig[i]); for (int i = 1; i <= N; i++) scanf("%lf", &P[i]); double ans = 0; for (int i = 0; i <= 20; i++) ans += solve(i, (s>>i)&1) * (1<<i); printf("Case %d:\n%.6lf\n", cas++, ans); } return 0;}
0 0
- hdu 4849 Professor Tian(dp)
- hdu - 4649 - Professor Tian(概率dp)
- HDU 4649 Professor Tian(概率DP)
- hdu 4649 Professor Tian (DP)
- DP hdu 4649 Professor Tian
- HDU 4649 Professor Tian(反状态压缩dp,概率)
- HDU 4649 - Professor Tian(概率DP)
- HDU 4649 Professor Tian (概率DP)
- HDU-4649 Professor Tian(期望dp)
- 【HDU】4649 Professor Tian 期望DP
- hdu 4649 Professor Tian
- hdu 4649 Professor Tian
- HDU 4649 Professor Tian
- HDU 4649 Professor Tian
- hdu 4649 Professor Tian
- HDU4649 Professor Tian(概率dp)
- hdu 4649 Professor Tian(期望)
- HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)
- test04
- 第二波Android的心得即将袭来~
- LeetCode -- Largest Number
- SQL exists not exists
- asp与php常用函数对照表(全)
- hdu 4849 Professor Tian(dp)
- Wex5-常用代码
- UIGestureRecognizer手势
- Wex5-共通方法-postRequest
- UITableViewCell 的单元格重用机制
- C++ 运算符优先级
- hdu 4651 Partition(公式)
- wap网站获取访问者手机号PHP类文件
- MySQL错误:Can't connect to(10060)