http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754

题意:有三个色子,分别有k1、k2、k3个面,权值分别是1~k1, 1~k2, 1~k3,等概率朝上。如果朝上的面分别为a、b、c,则分数置0,否则累加权值和。当权值和>n时则结束,求期望次数。T组数据。(T<=300; 1<k1,k2,k3<=6)

#include <cstdio>
#include <cstring>
using namespace std; const int N=805;
double A[N], C[N];
int n, p[500], k1, k2, k3, a, b, c;
int main() {
int T, all, del;
scanf("%d", &T);
while(T--) {
scanf("%d%d%d%d%d%d%d", &n, &k1, &k2, &k3, &a, &b, &c);
all=0;
del=a+b+c;
for(int i=1; i<=k1; ++i)
for(int j=1; j<=k2; ++j)
for(int k=1; k<=k3; ++k)
p[++all]=i+j+k;
for(int i=n; i>=0; --i) {
for(int j=1; j<=all; ++j) A[i]+=A[i+p[j]];
A[i]-=A[i+del]-1;
A[i]/=all;
for(int j=1; j<=all; ++j) C[i]+=C[i+p[j]];
C[i]-=C[i+del];
C[i]/=all;
C[i]+=1;
}
printf("%.15f\n", C[0]/(1-A[0]));
memset(A, 0, sizeof(double)*(n+1));
memset(C, 0, sizeof(double)*(n+1));
}
return 0;
}
/*
A[i]=(\sum_{j} A[j] - A[i+a+b+c] + 1)/(k1*k2*k3)
C[i]=(\sum_{j} C[j] - C[i+a+b+c])/(k1*k2*k3) + 1
*/

  

设$d[i]$表示当前分数为$i$时到游戏结束的期望次数。容易推得公式:

$$d[i]=(\sum_{j} d[j]-d[i+a+b+c]+d[0])/(k1*k2*k3)+1, j是转移到的状态$$

发现每一个都有一个循环的$d[0]$,那么我们可以将每一个状态表示为关于$d[0]$的方程的(在这里我是sb了没想到)

(如果不只是$d[0]$一个的话,那么最好用高斯消元)

所以我们只需要推系数即可!设$d[i]=A[i]d[0]+C[i]$

首先

$$
\begin{align}
& \sum_{j} d[j] - d[i+a+b+c] \\
=& \sum_{j} (A[j]d[0]+C[j]) - d[i+a+b+c] \\
=& \sum_{j} A[j]d[0] + \sum_{j} C[j] - A[i+a+b+c]d[0]-C[i+a+b+c]
\end{align}
$$

所以

$$d[i]=(d[0]\sum_{j} A[j] + \sum_{j} C[j] - A[i+a+b+c]d[0]-C[i+a+b+c] + d[0])/(k1*k2*k3)+1$$

所以

$$
\begin{align}
A[i] = & (\sum_{j} A[j] - A[i+a+b+c] + 1)/(k1*k2*k3)\\
C[i] = & (\sum_{j} C[j] - C[i+a+b+c])/(k1*k2*k3) + 1
\end{align}
$$

最后答案是$d[0]=C[0]/(1-A[0])$

【ZOJ】3329 One Person Game的更多相关文章

  1. 【ZOJ】4012 Your Bridge is under Attack

    [ZOJ]4012 Your Bridge is under Attack 平面上随机n个点,然后给出m条直线,问直线上有几个点 \(n,m \leq 10^{5}\) 由于共线的点不会太多,于是我们 ...

  2. 【ZOJ】【3329】One Person Game

    概率DP/数学期望 kuangbin总结题目中的第三道 看来还是没有进入状态啊……都说是DP了……当然是要找[状态之间的转移关系]了…… 本题中dp[i]跟 dp[i-(k1+k2+k3)] 到dp[ ...

  3. 【有上下界网络流】【ZOJ】2314 Reactor Cooling

    [算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...

  4. 【BZOJ】3329: Xorequ

    [题意]给定方程x^3x=2x,求<=x和<=2^x的满足方程的正整数个数. [算法]数位DP,矩阵快速幂 [题解]异或相当于不进位加法. 移项得,x^2x=3x,又因为x+2x=3x,所 ...

  5. 【HDOJ】3329 The Flood

    超简单BFS. /* 3329 */ #include <iostream> #include <queue> #include <cstdio> #include ...

  6. 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用

    转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html    ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...

  7. 【ZOJ】3740:Water Level【DP】

    Water Level Time Limit: 2 Seconds      Memory Limit: 65536 KB Hangzhou is a beautiful city, especial ...

  8. 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律

    转自:http://www.cnblogs.com/kevince/p/3887827.html 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这么一说大家心里肯定有数了吧,“不就是nex ...

  9. 【ZOJ】3380 Patchouli's Spell Cards

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3957 题意:m个位置,每个位置填1~n的数,求至少有L个位置的数一样的概率(1 ...

随机推荐

  1. 为什么是 n(n+1)/2 ?

    n(n+1)/2是一个数列的元素两两运算后的不重复结果数.如图: 假如数列a = 1,2,3....n.那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素. 用程序写 ...

  2. 【leetcode】Remove Duplicates from Sorted Array

    题目描述: Given a sorted array, remove the duplicates in place such that each element appear only once a ...

  3. 实现Activity刷新 (转)

    目前刷新Acitivity,只想到几种方法.仅供参考,如果您有更好的方法,请赐教. 程序界面: 点击refresh view可以刷新界面,点击write content可以在EditText中自动写入 ...

  4. HDU 4251 The Famous ICPC Team Again 主席树

    The Famous ICPC Team Again Problem Description   When Mr. B, Mr. G and Mr. M were preparing for the ...

  5. Shadow SSDT详解、WinDbg查看Shadow SSDT

    一.获取ShadowSSDT 好吧,我们已经在R3获取SSDT的原始地址及SDT.SST.KiServiceTbale的关系里面提到:所有的SST都保存在系统服务描述表(SDT)中.系统中一共有两个S ...

  6. 智能车学习(二十)——浅谈C车硬连接与软连接

    一.为何要追求软连接?       车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大 ...

  7. 分布式文件系统FastDFS设计原理(转)

    FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题 ...

  8. Memcache升级版:CouchBase的安装配置与使用说明

    Memcache基本上已经是开发的标配了,但是对于Memcache集群,很多线上部署仍然是很单薄的. 几个存在的问题:不健壮.数据不安全.配置变更可能导致存取异常.后备数据的一致性 鉴于存在以上问题, ...

  9. Apache Kafka for Item Setup

    At Walmart.com in the U.S. and at Walmart's 11 other websites around the world, we provide seamless ...

  10. Practical Java (一)关于reference

    Practice 1, 4, 7, 8 1. 参数传递:by value or by reference 变量型别:reference 和 primitive Java中的变量分为两种:referen ...