求助
查看原帖
求助
50787
zzzty___楼主2021/8/10 22:24
#include<bits/stdc++.h>
using namespace std;
struct state{
	int c[10];
	state(){}
	state(string S){
		for(int i=0;i<9;i++)
			c[i]=S[i]-'0';
	}
	int val(){
		int v=0;
		for(int i=0;i<9;i++)v=v*5+c[i];
		return v;
	}
};
char pile[10][6][2];
double mem[2000000];
bool read(){
	for (int i=0;i<9;i++)
        for (int j=1;j<=4;j++)
            if (!(cin>>pile[i][j]))
                return false;
    return true;
}
double dfs(state st){
	double& ans=mem[st.val()];
	if(ans!=-1.0) return ans;
	ans=0.0;
	int cnt=0;
	for(int i=0;i<9;i++){
		int& ci=st.c[i];
		if(ci<1) continue;
		for(int j=i+1;j<9;j++){
			int& cj=st.c[j];
			if(cj<1) continue;
			if(pile[i][ci][0]==pile[j][cj][0]){
				ci--,cj--;
				ans+=dfs(st);
				cnt++;
				ci++,cj++;
			}
		}
	}
	if(!cnt) return ans=0.0;
	return ans/=cnt;
}
int main(){
	while(read()){
		for(int i=0;i<=2000000;i++)mem[i]=-1.0;
		mem[0]=1.0;
		printf("%.6lf\n",dfs(state("444444444")));
	}
	return 0;
}
2021/8/10 22:24
加载中...