题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3191

原本想模拟过程,从t个人推到1个人;

  但是怎么转移呢?想状压,可是50位压不到角标里。

  那就随便转移吧,把当前人的生存方案数加给所有有可能成为下一轮中自己的人。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=;
int n,m,a[N];
ll dp[N][N],sum;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
dp[n][]=;
for(int t=n;t>;t--)
for(int i=;i<=n;i++)
if(dp[t][i])
{
// printf("t=%d i=%d dp=%d\n",t,i,dp[t][i]);
for(int j=;j<=m;j++)
{
int c=a[j]%t,l=i+c+,r=i-(t-c-);
// printf("i=%d aj=%d l=%d r=%d\n",i,a[j],l,r);
if(l>r)for(int k=;k<=n;k++)if(k>=r||k<=l)dp[t-][k]+=dp[t][i];
else for(int k=l;k<=r;k++)
dp[t-][k]+=dp[t][i];
}
}
for(int i=;i<=n;i++)sum+=dp[][i];
for(int i=;i<=n;i++)
printf("%.2lf",(double)dp[][i]*/(double)sum),cout<<"% ";
return ;
}

这当然是不对的。那个“有可能成为下一轮中自己的人”不能保证就是下一轮中的自己。

那怎么办?看看TJ,发现大家是用相对编号来记录下一轮中的自己是哪个人的。

  用记忆化搜索可以想得更灵活一点。以后尝试用这个角度思考。不然自己容易想不出来……

概率不用每一步都算好。可以之前一直算的是方案数,最后再换算成概率。有时候这样比较方便。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,m,a[N];
bool vis[N][N];
double dp[N][N],sum;
double sol(int i,int j)
{
if(vis[i][j])return dp[i][j];vis[i][j]=;
if(i==)return dp[i][j]=;
for(int k=;k<=m;k++)
if(a[k]%i!=j%i)//j%i,不是j (j==i)
dp[i][j]+=sol(i-,(j-(a[k]%i)+i)%i);
// dp[i][j]/=m;
return dp[i][j];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)sum+=sol(n,i);
for(int i=;i<=n;i++)
{
printf("%.2lf%%",sol(n,i)/sum*);
if(i!=n)printf(" ");
}
return ;
}

bzoj3191卡牌游戏的更多相关文章

  1. bzoj3191卡牌游戏——概率DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3191 不用在意每个人的编号,只需看他们相对于庄家的位置即可: 所以设计状态f[i][j]为还 ...

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=3191 每个人获胜的概率只与其在排列中与庄家的相对位置有关 dp[i][j] 还剩i个人时,从庄家数第 ...

  3. 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]

    卡牌游戏 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description   N个人坐成一圈玩游戏.一开始我 ...

  4. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  5. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  6. 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告

    P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...

  7. TCG卡牌游戏研究:《炉石战记:魔兽英雄传》所做的改变

    转自:http://www.gameres.com/665306.html TCG演进史 说到卡牌游戏,大家会联想到什么呢? 是历史悠久的扑克牌.风靡全球的<MTG 魔法风云会>与< ...

  8. BZOJ 4392 卡牌游戏

    Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...

  9. [JLOI2013]卡牌游戏 概率DP

    [JLOI2013]卡牌游戏 概率DP 题面 \(dfs\)复杂度爆炸,考虑DP.发现决策时,我们只用关心当前玩家是从庄家数第几个玩家与当前抽到的牌是啥.于是设计状态\(f[i][j]\)表示有\(i ...

随机推荐

  1. PHP设计模式_适配器模式

    将各种截然不同的函数接口封装成统一的API. PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API.类似的场景还有cache适 ...

  2. Linux基础入门第三节(修改)

    第三节 作业部分 添加一个用户loutest,使用sudo创建文件/opt/forloutest,设置成用户loutest可以读写.截图并把操作过程写入实验报告. 找到了解决的办法,在touch命令前 ...

  3. CEF禁止右键菜单

    转载:http://www.cctry.com/thread-258549-1-1.html 转载:http://blog.sina.com.cn/s/blog_dad2c54101019cmo.ht ...

  4. 在pom.xml中使用distributionManagement将项目打包上传到nexus私服

    本文介绍 如何在pom.xml中使用distributionManagement将项目打包上传到nexus私服 1.pom.xml文件添加distributionManagement节点 <!- ...

  5. 反射调用发生错误信息 LoadNeither

    错误信息: Service cannot be started. System.Reflection.TargetInvocationException: Exception has been thr ...

  6. BZOj 墨墨的等式(转化为最短路)题解

    题意:中文题意不解释... 思路:这道题居然可以转化为最短路orz,要等式有非负整数解,我们可以转化一下:每个ai不限数量,问你能用ai数组拼出多少个Bmin~Bmax范围内的数,有点像完全背包的感觉 ...

  7. HDU1510 White rectangles( 乱搞 O(n^3) )题解

    思路: 友谊赛的时候一直想到了,但是没想出来怎么遍历才能找到所有矩阵,卡住了. 这里讲一下完整思路:我们用一个num[i][j]表示第i行第j列每一列连续的白色格子数量,然后我们定义一个MIN,并且每 ...

  8. about SpringBoot学习后记

    <SpringBoot实战>第一章节入门的名称为Spring风云再起 看起来Spring的功能确实受Java开发者喜爱 在SpringBoot中,继续将Spring框架做了另一次的封装使框 ...

  9. 【P4语言学习】basic_routing.p4

    headers.p4 /* Copyright 2013-present Barefoot Networks, Inc. Licensed under the Apache License, Vers ...

  10. 【转载】linux fork死循环炸弹及其预防

    转自linux fork死循环炸弹及其预防 在Linux系统下执行这段代码 :(){ :|:& }:: 就会引起死机,一旦执行起来后,唯一的方法就是重启系统.实际上这段代码是一段无限递归代码, ...