微信小程序网站建设方案,十大网站app软件下载,永久免费的网站推荐,办公室装修设计 公司正题 题目大意 nnn个人#xff0c;有投票几率aia_iai和级别bib_ibi#xff0c;kkk个糖#xff0c;每个可以让一个官员增加0.10.10.1的投票几率。 然后如果有超过一半的人投你#xff0c;你就可以成功。 不然成功概率就是A/(A∑i∈Sbi)A/(A\sum^{i\in S}b_i)A/(A∑i∈S…正题 题目大意
nnn个人有投票几率aia_iai和级别bib_ibikkk个糖每个可以让一个官员增加0.10.10.1的投票几率。 然后如果有超过一半的人投你你就可以成功。 不然成功概率就是A/(A∑i∈Sbi)A/(A\sum^{i\in S}b_i)A/(A∑i∈Sbi) 求最大的成功概率 解题思路
由于数据小的可怜所以我们直接dfsdfsdfs枚举给糖然后枚举所以投票情况求概率。取最大值。 codecodecode
#includecstdio
#includealgorithm
#includecctype
using namespace std;
int n,k,ok;
double A,a[10],b[10];
double ans,answer;
double read() {int x0,f1; char cgetchar();while(!isdigit(c)) {if(c-)f-f;cgetchar();}while(isdigit(c)) x(x1)(x3)c-48,cgetchar();return (double)x*f;
}
void check(int dep,int c,double k,double z){if(k0) return;if(depn){if(cok) ansk;else ansk*A/(Az);return;}check(dep1,c1,k*a[dep1],z);check(dep1,c,k*(1-a[dep1]),zb[dep1]);
}
void dfs(int dep,int c){if(c0){ans0;check(0,0,1,0);answermax(ans,answer);return;}if(depn) return;for(int i0;ic;i)if((a[dep1](double)i*0.1)1.0001){a[dep1](double)i*0.1;dfs(dep1,c-i);a[dep1]-(double)i*0.1;}else break;
}
int main()
{scanf(%d%d,n,k);Aread();okn/21;for(int i1;in;i)b[i]read(),a[i]read()/100;dfs(0,k);printf(%0.6lf,answer);
}