【ZOJ】3329 One Person Game
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的更多相关文章
- 【ZOJ】4012 Your Bridge is under Attack
[ZOJ]4012 Your Bridge is under Attack 平面上随机n个点,然后给出m条直线,问直线上有几个点 \(n,m \leq 10^{5}\) 由于共线的点不会太多,于是我们 ...
- 【ZOJ】【3329】One Person Game
概率DP/数学期望 kuangbin总结题目中的第三道 看来还是没有进入状态啊……都说是DP了……当然是要找[状态之间的转移关系]了…… 本题中dp[i]跟 dp[i-(k1+k2+k3)] 到dp[ ...
- 【有上下界网络流】【ZOJ】2314 Reactor Cooling
[算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...
- 【BZOJ】3329: Xorequ
[题意]给定方程x^3x=2x,求<=x和<=2^x的满足方程的正整数个数. [算法]数位DP,矩阵快速幂 [题解]异或相当于不进位加法. 移项得,x^2x=3x,又因为x+2x=3x,所 ...
- 【HDOJ】3329 The Flood
超简单BFS. /* 3329 */ #include <iostream> #include <queue> #include <cstdio> #include ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- 【ZOJ】3740:Water Level【DP】
Water Level Time Limit: 2 Seconds Memory Limit: 65536 KB Hangzhou is a beautiful city, especial ...
- 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律
转自:http://www.cnblogs.com/kevince/p/3887827.html 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这么一说大家心里肯定有数了吧,“不就是nex ...
- 【ZOJ】3380 Patchouli's Spell Cards
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3957 题意:m个位置,每个位置填1~n的数,求至少有L个位置的数一样的概率(1 ...
随机推荐
- 【C#】 用Route进行URL重写
在.NET Framework 4中,微软推出了Route机制.这种机制不仅在MVC中大量运用,在WebForm中也可以使用. 和Contex.RewritePath()一样,Route功能也是写在G ...
- Mishka and Interesting sum Codeforces Round #365 (树状数组)
树状数组,与Turing Tree类似. xr[i]表示从1到i的抑或,树状数组维护从1到i每个数只考虑一次的异或,结果为sum(r) ^ sum(l) ^ xr[r] ^ xr[l] 其中xr[r] ...
- 7-14 EXISTS子查询
EXISTS: 只注重于子查询是否有返回行,如果查有返回行返回结果为值,否则为假 并不使用子查询的结果,仅用于测试子查询是否有返回结果. 语法: IF EXISTS (子查询) BEGIN 语句块 E ...
- WCF学习笔记之WCF初识
这篇博客将介绍WCF的最基础内容,让我们对WCF有一个基本的认识.后续的博客中将会介绍WCF其他方面内容.本篇博客将通过一个简单的例子,介绍如何创建WCF服务,并承载这个服务,让客户端来访问它.下面请 ...
- [WebService] the namespace on the "definitions" element, is not a valid SOAP version
公司对外通过webservice访问别人接口,对方webservice IP地址发生变化,切换过去之后,始终报错,在网上搜索了各种办法之后,暂时总结该问题几种可能解决办法,待真正解决时用的到. 异常详 ...
- 源码方式安装mysql5.5
mysql5.5开始,源码配置编译工具configure变成了cmake,所以先要去把cmake装上.并安装make,bison,cmake,gcc-c++,ncurses的包 去http://www ...
- VS2013缺少报表工具
问题1:缺少报表设计工具--即rdlc无法打开设计器 原因:缺少SQL Server Data Tools(SSDT)工具 解决:安装ssdt即可 SSDT下载地址:https://msdn.micr ...
- Arduino101学习笔记(八)—— 函数库
/*********最小值*********/ min() //实现:#define min(a,b) ((a)<(b)?(a):(b)) /*********最大值*********/ max ...
- supervisor(一)基础篇
这两天干的活,是让楼主写一个supervisor的listener,用来监控supervisor所管理子进程的状态,当子进程异常退出时,楼主写的这个listener将会触发报警.在这里总结下super ...
- python运算符和表达式
算术运算符: 比较运算符: 赋值运算符: 位运算符: 逻辑运算符: 身份运算符: 成员运算符: 运算符优先级: