BZOJ3640 : JC的小蘋果

來源:互聯網
上載者:User

標籤:

設$f[i][j]$表示$hp$為$i$,在$j$點的機率,$d[i]$表示$i$的度數,$w[i]$表示經過$i$點要扣掉的血量。

對於$j$到$k$這條邊,$f[i-w[k]][k]+=\frac{f[i][j]}{d[j]}$。

若$w[k]>0$,則直接將貢獻加給$f[i-w[k]][k]$,否則加入轉移矩陣$G$。

對於當前層,有$G\times f‘[i]=f[i]$,即$f‘[i]=G^{-1}\times f[i]$,對G求出逆矩陣即可。

時間複雜度$O(n^3+n^2hp)$。

 

#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int N=152,M=10010;int n,m,hp,i,j,k,w[N],g[N],v[M],nxt[M],ed;double t,a[N][N],b[N][N],d[N],f[M][N],c[N],ans;void add(int x,int y){d[x]+=1;v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}int main(){  scanf("%d%d%d",&n,&m,&hp);  for(i=1;i<=n;i++)scanf("%d",&w[i]);  while(m--){    scanf("%d%d",&i,&j),add(i,j);    if(i!=j)add(j,i);  }  for(i=1;i<=n;i++)d[i]=1.0/d[i];  for(i=1;i<=n;i++){    if(i<n)for(j=g[i];j;j=nxt[j])if(!w[v[j]])a[v[j]][i]-=d[i];    a[i][i]+=1,b[i][i]=1;  }  for(i=1;i<=n;i++){    for(k=i,j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;    if(k!=i)for(j=1;j<=n;j++)swap(a[i][j],a[k][j]),swap(b[i][j],b[k][j]);    for(j=i+1;j<=n;j++)for(t=a[j][i]/a[i][i],k=1;k<=n;k++)a[j][k]-=a[i][k]*t,b[j][k]-=b[i][k]*t;  }  for(i=n;i;i--){    for(j=n;j>i;j--)for(t=a[i][j],k=1;k<=n;k++)a[i][k]-=a[j][k]*t,b[i][k]-=b[j][k]*t;    for(t=a[i][i],j=1;j<=n;j++)a[i][j]/=t,b[i][j]/=t;  }  f[hp][1]=1;  for(i=hp;i;i--){    for(j=1;j<=n;j++)for(c[j]=0,k=1;k<=n;k++)c[j]+=b[j][k]*f[i][k];    ans+=c[n],c[n]=0;    for(j=1;j<n;j++)for(k=g[j];k;k=nxt[k])if(w[v[k]]&&i>w[v[k]])f[i-w[v[k]]][v[k]]+=c[j]*d[j];  }  return printf("%.8f",ans),0;}

  

BZOJ3640 : JC的小蘋果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.