[bzoj3191] [JLOI2013]卡牌游戏
Posted czllgzmzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj3191] [JLOI2013]卡牌游戏相关的知识,希望对你有一定的参考价值。
概率DP。
首先由题解可得>_<,胜出概率只与剩余人数、与庄家的相对位置有关。
所以设f[i][j]表示剩下i个人,从庄家开始第j个人的胜利概率。。。
根据卡牌一通乱搞即可。。。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #define d float 6 using namespace std; 7 int a[52],b[52]; 8 d f[52][52]; 9 int i,j,k,n,m; 10 11 int ra;char rx; 12 inline int read(){ 13 rx=getchar(),ra=0; 14 while(rx<\'0\'||rx>\'9\')rx=getchar(); 15 while(rx>=\'0\'&&rx<=\'9\')ra*=10,ra+=rx-48,rx=getchar();return ra; 16 } 17 18 int main(){ 19 n=read(),m=read(); 20 for(i=1;i<=m;i++)a[i]=read();register int k; 21 f[1][1]=1.0; 22 for(i=2;i<=n;i++){ 23 for(j=1;j<=m;j++)b[j]=(a[j]-1)%i+1; 24 for(j=1;j<=i;j++){ 25 d tmp=0.0;int zj; 26 for(k=1;k<=m;k++)if(b[k]!=j) 27 zj=b[k]==i?1:b[k]+1, 28 tmp+=f[i-1][j>=zj?j-zj+1:i-(zj-j)+1]; 29 f[i][j]=tmp/m; 30 } 31 } 32 for(i=1;i<n;i++)printf("%.2f",f[n][i]*100),putchar(\'%\'),putchar(\' \');printf("%.2f",f[n][n]*100);puts("%"); 33 }
以上是关于[bzoj3191] [JLOI2013]卡牌游戏的主要内容,如果未能解决你的问题,请参考以下文章