【BZOJ 3191】[JLOI2013]卡牌游戏
生活随笔
收集整理的這篇文章主要介紹了
【BZOJ 3191】[JLOI2013]卡牌游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
注意 最后一個沒有空格!!!!!
題解(摘自網絡)
有一個很重要的性質:當前人獲勝的概率只與其在排列中與莊家的相對位置和人數有關、、跟具體有哪些人無關、、
那么我們可以用f[i][j]表示還有i人時從莊家開始數第j個人獲勝的概率、、
于是可以枚舉當前每種可能然后從f[i-1][*]轉移、、這就可以寫成一個DP了、、
//要特別注意 f的意義!!!!!
代碼
#include <cstdio> double f[51][51]; int a[51]; int n,m; int main() {scanf("%d %d",&n,&m);for(int i=1;i<=m;i++) scanf("%d",&a[i]);f[1][1]=1;for(int i=2;i<=n;i++)for(int j=1;j<=i;j++)for(int k=1;k<=m;k++){int tmp=a[k]%i;if(tmp==0) tmp=i; if(tmp==j) continue;if(tmp>j) tmp=i-tmp+j;else tmp=j-tmp; f[i][j]+=f[i-1][tmp]/(double)m;}for(int i=1;i<n;i++) printf("%.2lf%% ",f[n][i]*100.0);printf("%.2lf%%",f[n][n]*100.0);return 0; }轉載于:https://www.cnblogs.com/ofsxb/p/5123374.html
總結
以上是生活随笔為你收集整理的【BZOJ 3191】[JLOI2013]卡牌游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现:首页--上一页--下一页--末页的
- 下一篇: 重磅!2020国家科学技术奖全名单公布!