题目链接戳这里

首先递归调用函数次数其实是可以预处理出来的,但是这里我们介绍一个更屌的做法。

设\(F(i,j)\)为求解\(P(i,j)\)所遍历的节点数目,则有$$F(0,j)=F(i,0)=0$$

\[F(i,j)=F(i-1,j)+F(i,j-1)+2
\]

我们观察一下,发现这个式子与组合恒等式$$\binom{n}{r} = \binom{n-1}{r-1}+\binom{n-1}{r}$$

于是我们可以令\(G(i,j)=F(i,j)+2\),则有$$G(i,j) = G(i-1,j)+G(i,j-1)$$

再通过待定系数便可以得到$$F(i,j)=2\binom{i+j}{i}-1$$

下面考虑\(P(i,j)\)的求法,我们可以枚举起始点\((0,a)\)(就是枚举递归边界),则这个点对答案的贡献即为$$\binom{i+j-a-1}{j-a}p{i}(1-p){j-a}$$

这个可以画一个格点图来考虑。

那么算法我们分析完了,接下来就是这道题最蛋痛的地方了——高精度。我开始C++为了不写除法特意采用了质因子合并的算法,并且还保证了复杂度。但是,玩玩没想到算\(P(i,j)\)的时候double的精度不够,可能要用取对数的思想,但我不想想了。于是便将目光转向java,BigDecimal类精度绝对够了。下面就是我的代码:

import java.math.*;
import java.util.*;
public class Main
{
static final int num = 2010;
static BigInteger C[][] = new BigInteger[num][num];
public static void main(String args[])
{
for (int i = 0;i < num;++i) for (int j = 0;j < num;++j) C[i][j] = BigInteger.ZERO;
for (int i = 0;i < num;++i)
{
C[i][0] = BigInteger.ONE;
for (int j = 1;j <= i;++j) C[i][j] = C[i-1][j-1].add(C[i-1][j]);
}
Scanner cin = new Scanner(System.in); BigDecimal P,Q; int Case = 0;
while (true)
{
P = cin.nextBigDecimal(); Q = (BigDecimal.valueOf(1)).subtract(P);
int N = cin.nextInt(); if (N == 0) break;
if (Case++ > 0) System.out.println("");
while ((N--) > 0)
{
int a = cin.nextInt(),b = cin.nextInt();
if (a <= 0&&b <= 0) System.out.println("-1.00000\n0");
else if (a < 0||b < 0) System.out.println("-1.00000\n0");
else if (a > 1000||b > 1000) System.out.println("-1.00000\n0");
else
{
BigDecimal sum = new BigDecimal(0);
if (a == 0) sum = BigDecimal.valueOf(1);
else for (int i = 1;i <= b;++i) sum = sum.add(new BigDecimal(C[a+b-i-1][a-1]).multiply(P.pow(a).multiply(Q.pow(b-i))));
System.out.format("%.5f\n",sum);
System.out.println(C[a+b][a].multiply(BigInteger.valueOf(2)).subtract(BigInteger.valueOf(2)));
}
}
}
}
}

Uva10207 The Unreal Tournament的更多相关文章

  1. Unreal引擎术语表

    转自:http://www.cnblogs.com/hmxp8/archive/2012/02/10/2345274.html Unreal引擎术语表 转载自UDN: ‍Actor - 一个可以放置在 ...

  2. 使用VS2012调试ReactOS源码

    目录 一 下载并安装VS2012 二 下载并安装WDK80 三 下载ReactOS0315源码 四 下载并安装RosBE211 五 用RosBE命令行编译ReactOS源码 六 用VS2012编译nt ...

  3. zz Must read

    http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...

  4. C#中XmlTextWriter读写xml文件详细介绍(转)

    转自http://www.jb51.net/article/35230.htm   .NET中包含了很多支持XML的类,这些类使得程序员使用XML编程就如同理解XML文件一样简单.在这篇文章中,我将给 ...

  5. metasploit--exploit模块信息

    Name                                             Disclosure Date  Rank    Description ----           ...

  6. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

  7. Networked Graphics: Building Networked Games and Virtual Environments (Anthony Steed / Manuel Fradinho Oliveira 著)

    PART I GROUNDWORK CHAPTER 1 Introduction CHAPTER 2 One on One (101) CHAPTER 3 Overview of the Intern ...

  8. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization【转】

    https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Proto ...

  9. Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap

    Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap 网络扫描和嗅探工具——Nmap Nmap也就网络映射器(Network Mapper),是一个免费开放的网络扫描和嗅探工具.该工具可以扫描 ...

随机推荐

  1. 考试必备神器-真题园手机客户端Android版1.1正式上线啦,欢迎大家下载使用!

    真题园-考试必备神器,爱学习,找真题! 真题园-考试必备神器,爱学习,找真题!1.真题园android客户端1.1版全新发布上线.2.最新教育资讯实时更新,了解行业动态新闻.3.最新最全的真题大全,最 ...

  2. Netbeans7.0完美中文+Consolas字体显示配置(亲测可用)

    最近把开发环境从Eclipse迁移到了Netbeans上面.因为Netbeans已经相当优秀,速度快功能也不必Eclipse差,但是一只有 一个问题一直让我对eclipse非常纠结:如果把字体选择为C ...

  3. Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码)

    Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码) 备注: 之前在Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合中 ...

  4. poj1308 Is It A Tree?(并查集)详解

    poj1308   http://poj.org/problem?id=1308 题目大意:输入若干组测试数据,输入 (-1 -1) 时输入结束.每组测试数据以输入(0 0)为结束标志.然后根据所给的 ...

  5. 利用Highcharts制作web图表学习(二)

        最近中海油的项目需要用到图表展示数据,最近还是一直边学习边开发,今天做了一个展示,炼化厂加热炉效率展示的柱状图,把代码贴出来,大家指点一下互相学习,我是通过数组给Highcharts绑定的值, ...

  6. iOS iOS与html进行交互

    实现的 效果就是上边那样:首先通过webview 进行网络请求 然后进行显示. 然后点击下一页的按钮 通过js的响应显示另一个网页 最后通过下一页的按钮可以返回到首页. 本文仅仅是h5跟ios 的交互 ...

  7. 漫话JavaScript与异步·第一话——异步:何处惹尘埃

    自JavaScript诞生之日起,频繁与异步打交道便是这门语言的使命,并为此衍生出了许多设计和理念.因此,深入理解异步的概念对于前端工程师来说极为重要. 什么是异步? 程序是分"块" ...

  8. [转]:移动端H5页面高清多屏适配方案

    原文链接:http://www.tuicool.com/articles/YJviea 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们 ...

  9. HDU 3008 Warcraft(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008 题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100).n个技能,每个技能消耗 ...

  10. C++数组(指针)作为函数参数

    本文的学习内容参考:http://blog.csdn.net/wwdlk/article/details/6322843 1.当用数组名作为函数参数时,函数的实参和形参都应为数组名(或者指针): Ex ...