标签:style blog http ar sp for on art log
哇哦,感觉有点难哦,三个骰子,分别具有k1,k2,k3个面,抛骰子,若向上的一面分别对应为a,b,c,那么得分归0,否则得分加上三个骰子向上那一面数字之和,求得分超过n的时候抛骰子的次数的期望这里发现dp[0] 其实在这里不算是变量了,跟一个常数一样,所以上面才那样做出假设的,没有想到这点所以不知道如何处理,唉~
int t;
int k1,k2,k3,aa,bb,cc,n;
double pp[50 + 5];
double AA[500 + 55],BB[500 + 55];
void init() {
memset(pp,0.00,sizeof(pp));
memset(AA,0.00,sizeof(AA));
memset(BB,0.00,sizeof(BB));
}
bool input() {
while(cin>>n>>k1>>k2>>k3>>aa>>bb>>cc) {
pp[0] = 1.0/k1 * 1.0/k2 * 1.0/k3;
return false;
}
return true;
}
void cal() {
for(int i=1;i<=k1;i++)
for(int j=1;j<=k2;j++)
for(int k=1;k<=k3;k++)
if(i != aa || j != bb || k != cc)
pp[i + j + k] += 1.0/k1 * 1.0/k2 * 1.0/k3;
for(int i=n;i>=0;i--) {
AA[i] = 0.00;
BB[i] = 0.00;
for(int k=1;k<= k1 + k2 + k3;k++) {
AA[i] += pp[k] * AA[i + k];
BB[i] += pp[k] * BB[i + k];
}
AA[i] += pp[0];
BB[i] += 1.00;
}
double ans = BB[0]/(1 - AA[0]);
printf("%.10lf\n",ans);
}
void output() {
}
int main() {
cin>>t;
while(t--) {
init();
if(input())return 0;
cal();
output();
}
return 0;
}标签:style blog http ar sp for on art log
原文地址:http://blog.csdn.net/yitiaodacaidog/article/details/41358945