hdu4870 Rating高斯消元
2015-04-17 15:28
267 查看
点击打开链接
并不能用dp来做,求一个状态的时候会调用它自己。
f[i][j]=f[i][j+1]*p+f[i][j-2]*(1-p)+1,即f[i][j]-p*f[i][j+1]-(1-p)*f[i][j-2]=1,f[i][j]表示到f[20][k]的期望,总状态数为210个,(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)...(19,19);
建立以这些状态为系数的方程组,高斯消元即可。
并不能用dp来做,求一个状态的时候会调用它自己。
f[i][j]=f[i][j+1]*p+f[i][j-2]*(1-p)+1,即f[i][j]-p*f[i][j+1]-(1-p)*f[i][j-2]=1,f[i][j]表示到f[20][k]的期望,总状态数为210个,(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)...(19,19);
建立以这些状态为系数的方程组,高斯消元即可。
#include<iostream> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<iomanip> #include<map> #include<algorithm> #include<queue> #include<set> #define inf 1000000000 #define pi acos(-1.0) #define eps 1e-8 #define seed 131 using namespace std; typedef pair<int,int> pii; typedef unsigned long long ull; typedef long long ll; const int maxn=100005; struct mat { double e[250][250]; }; mat s; double p; void gaussElimination(int n) { int i,j,k,r; for(int i=1;i<=n;i++) { r=i; for(int j=i+1;j<=n;j++) if(fabs(s.e[j][i])>fabs(s.e[r][i])) r=j; if(r!=i) for(int j=1;j<=n+1;j++) swap(s.e[r][j],s.e[i][j]); for(int k=i+1;k<=n;k++) for(int j=n+1;j>=i;j--) s.e[k][j]-=s.e[k][i]/s.e[i][i]*s.e[i][j]; } for(int i=n;i>=1;i--) { for(int j=i+1;j<=n;j++) s.e[i][n+1]-=s.e[j][n+1]*s.e[i][j]; s.e[i][n+1]/=s.e[i][i]; } } int main() { int d[20]; d[0]=1; for(int i=1;i<=19;i++) d[i]=d[i-1]+i+1; while(~scanf("%lf",&p)) { for(int i=1;i<=210;i++) for(int j=1;j<=210;j++) s.e[i][j]=0; for(int i=0;i<=19;i++) { for(int j=0;j<=i;j++) { int k; if(i==0) k=1; else k=d[i-1]+j+1; s.e[k][k]=1; s.e[k][211]=1; int ii=i,jj=j+1; if(ii<jj) swap(ii,jj); int kk; if(ii==0) kk=1; else kk=d[ii-1]+jj+1; if(ii<20) s.e[k][kk]-=p; ii=i,jj=j-2; if(jj<0) jj=0; if(ii==0) kk=1; else kk=d[ii-1]+jj+1; s.e[k][kk]-=(1-p); //cout<<k<<endl; } } //cout<<1<<endl; gaussElimination(210); printf("%.10lf\n",s.e[1][211]); } return 0; }
相关文章推荐
- hdu4870 Rating (高斯消元或者dp)
- HDU4870_Rating_双号从零单排_高斯消元求期望
- hdu4870 Rating (高斯消元或者dp)
- hdu3976[Electric resistance] hdu5006[Resistance] hdu4870[Rating] 高斯消元
- hdu 4870 rating(高斯消元求期望)
- 高斯消元(good)hdu4870
- hihocoder 1166 交换代数|HDU 4870 Rating 等(区间翻转,高斯消元求期望)
- HDU 4870 Rating 2014 Multi-University Training Contest 1 J题 概率DP+高斯消元
- hdu 4870 Rating 高斯消元或者递推
- HDU 4870 Rating(概率dp+高斯消元)
- HDU 4870 Rating 高斯消元求期望
- hdu 4870 Rating (高斯消元解概率dp)
- hdu 4870 Rating(高斯消元求期望)
- HDU 4870 Rating 多校联合练习赛 高斯消元
- hdu4870 高斯消元
- [hdu4870]高斯消元
- hdu 4870 Rating 高斯消元/递推
- 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
- hdu--4870 Rating(高斯消元,概率)
- HDU 4870 Rating(高斯消元)