标签:bzoj3191 jloi2013 卡牌游戏 概率dp
#include <stdio.h> int main() { puts("转载请注明出处谢谢"); puts("http://blog.csdn.net/vmurder/article/details/43445237"); }
题解:
f[i][j]表示剩i个人时,最后要第j(相对庄家)个活下来的概率。
然后乱搞
代码:
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 55 using namespace std; int n,m,a[N]; double f[N][N]; int main() { int i,j,k,r; scanf("%d%d",&n,&m); for(i=1;i<=m;i++)scanf("%d",&a[i]); for(r=0;r<n;r++) { memset(f,0,sizeof f); f[n][(n-r)%n]=1.0; // 初始状态 for(i=n-1;i;i--) // 剩余i人 { for(j=0;j<=i;j++) // 那个人离庄家距离 for(k=1;k<=m;k++) // 拿到的牌 f[i][(j+a[k]-1)%(i+1)]+=f[i+1][j]/m; f[i][0]=f[i][i]; } if(r)printf(" "); printf("%.2lf%%",f[1][0]*100); // 只剩他一个人 } return 0; }
标签:bzoj3191 jloi2013 卡牌游戏 概率dp
原文地址:http://blog.csdn.net/vmurder/article/details/43445237