标签:
#include<iostream> #include<cstring> using namespace std; int main() { double P[205][205],p; int i,j,n; while(cin>>n>>p) { for(i=1;i<=n;i++) { P[i][0]=0; P[0][i]=1; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { P[i][j]=P[i-1][j]*p+P[i][j-1]*(1-p); } } cout<<P[n][n]<<endl; } return 0; }
//OJ数据有误,AC代码:cout<<P[n-3][n-3]<<endl,由于BUG,只能用C++写,AHU-0J:http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=294,反而用C++提交,WA;
注:这题输入 n 代表该比赛是 2*n+1 场 n 胜制,输入 7 即 15 场 7胜制。不可以用组合数去做,数据太大了。用dp去做,P[i][j]的含义是:当A队(湖人队)还有 i 场比赛需要赢,才能夺得冠军,B队(凯尔特人队)还有 j 场比赛需要赢,才能夺得冠军时,A队(湖人队)获得冠军的概率,所以边界 P[i][0]=0 (1<=i<=n)(B队已经夺冠了),P[0][i]=1 (1<=i<=n)(A队已经夺冠了),要求的输出即是 P[n][n](带入上述P[i][j]去理解),关于状态转移方程 P[i][j]=P[i-1][j]*p+P[i][j-1]*(1-p) 说明如下:。
标签:
原文地址:http://www.cnblogs.com/haveyoueverbeen/p/4484822.html