[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 }
View Code

 

以上是关于[bzoj3191] [JLOI2013]卡牌游戏的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ3191JLOI2013卡牌游戏 [DP]

bzoj3191 [JLOI2013]卡牌游戏

bzoj 3191: [JLOI2013]卡牌游戏

bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏

bzoj 3191 [JLOI2013]卡牌游戏 概率dp

bzoj3191卡牌游戏