宁波多校 B题 狂赌之渊(dfs+概率)
Posted ctyakwf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宁波多校 B题 狂赌之渊(dfs+概率)相关的知识,希望对你有一定的参考价值。
概率+暴力dfs
可以暴力枚举所有的状态,判断是否成立,对于每个状态,记录抽到这个状态的概率,如果能成功,就在答案上加上这个概率
#include <cstdio> #include <algorithm> #include<iostream> using namespace std; const int N=1e5+10; int t; int a[N]; int x[N]; double ans; int flag; int v[N]; int d[N]; int all; bool check(int u){ int i; for(i=0;i<3&&!flag;i++){ if(!v[i]){ if(d[i]==(x[u]+1)%3)//当前手牌被击败,换一张 continue; if(d[i]==x[u]-1){//两个人的手牌相等,可以考虑递归检验,如果以当前为首位不行,才换一张 v[i]=1; check(u+1); v[i]=0; } else{//直接击败 flag=1; return true; } } } return false; } void dfs(int u,double P){ if(u==3){ flag=0; check(0); if(flag) ans+=P; return ; } for(int i=0;i<3;i++){ if(!a[i]) continue; a[i]--; d[u]=i; dfs(u+1,P*(a[i]+1)/(all-u)); a[i]++; } } int main() { cin>>t; while(t--){ cin>>a[0]>>a[1]>>a[2]>>x[0]>>x[1]>>x[2]; all=a[0]+a[1]+a[2]; ans=0; dfs(0,1); printf("%.2f ",ans); } }
以上是关于宁波多校 B题 狂赌之渊(dfs+概率)的主要内容,如果未能解决你的问题,请参考以下文章
宁波多校 E题 ddd的逛街计划(Easy Version)