教做甜点的网站换友情链接的网站
news/
2025/9/23 19:34:43/
文章来源:
教做甜点的网站,换友情链接的网站,网站建设分金手指科捷13,常州网站推广软件信息朴素的 f[S]表示S到(1n)的期望次数 发现1的个数只增加不减少 所以可以类似拓扑序的图#xff0c;然后枚举子集O(3^n)转移 没有优化的余地 另辟蹊径#xff1a; 拆开每一位来看 t[i]表示第i位变成1的次数 ansE(max(t[i])) 根据min-max容斥 得到#xff1a;ans∑E(t[i…朴素的 f[S]表示S到(1n)的期望次数 发现1的个数只增加不减少 所以可以类似拓扑序的图然后枚举子集O(3^n)转移 没有优化的余地 另辟蹊径 拆开每一位来看 t[i]表示第i位变成1的次数 ansE(max(t[i])) 根据min-max容斥 得到ans∑E(t[i])-∑E(min(t[i],t[j]))∑E(min(t[i],t[j],t[k]))..... 考虑min(S)的含义 使得这个S中的任意一位0变成1的期望次数 操作一次变成1的概率tmp(1-p(操作一次不包含S)) 这个用FMT 当然可以直接计算操作一次包含S的概率但是直接FMT会把0算上这个要特殊处理 1/tmp就是期望次数 根据S的size的奇偶确定符号 代码 #includebits/stdc.h
#define reg register int
#define il inline
#define numb (ch^0)
using namespace std;
typedef long long ll;
il void rd(int x){char ch;x0;bool flfalse;while(!isdigit(chgetchar()))(ch-)(fltrue);for(xnumb;isdigit(chgetchar());xx*10numb);(fltrue)(x-x);
}
namespace Miracle{
const int N22;
double p[120];
int sz[120];
double ans;
int n;
int main(){rd(n);for(reg i0;i(1n);i){scanf(%lf,p[i]);sz[i]sz[i1](i1);}for(reg i0;in;i){for(reg j0;j(1n);j){// cout i j i jendl;if(j(1i)) p[j]p[j^(1i)];}}
// cout FMT endl;int s(1n)-1;for(reg i1;i(1n);i){int bus-i;double tmp;// cout bu bu p[bu] p[bu]endl;if(p[bu]!1.000) tmp1/(1.0-p[bu]);else {puts(INF);return 0;}if(sz[i]1){anstmp;}else ans-tmp;}printf(%.10lf,ans);return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/1/4 22:15:10
*/ 如果想到min-max容斥和式子 应该就比较好做了。 正难则反的原因是 max要考虑最后一个变成1的次数都要考虑上太麻烦 min只要考虑第一个变成1的次数有一个操作涉及S就合法了。 转载于:https://www.cnblogs.com/Miracevin/p/10225504.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913645.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!