题目链接戳这里

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

设\(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. 文件处理-Directory类 (C#)

    转http://skybirdzw.blog.163.com/blog/static/7257062620099751329403/ 文件处理-Directory类 (C#) Directory.Cr ...

  2. Android_Intent_passObject

    方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象需要考虑对Person对象进行序列化 MainActivity: package com.example.day06_acti ...

  3. HINSTANCE数据类型

    作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有.转载时请在明显地方注明本文的详细链接,未经作者同意请不要删 ...

  4. 如何在Linux上安装Storm

    Storm是开源的分布式实时计算系统,能够让数据流处理变得简单.可靠,也因此在大数据领域有广泛的实际 应用.下面介绍一下如何在Linux系统上安装Storm.根据Storm官网介绍,安装Storm软件 ...

  5. java strtus2 DynamicMethodInvocation配置入门 " ! "访问action里面的方法

    这里来讲解一下strtus2动态配置的用法. 配置之后不用通过 <action method="">去配置调用的具体方法. 第一:web.xml <?xml ve ...

  6. C#做的一个加密/解密的类

    转自:http://www.16aspx.com/Article/3904 using System; using System.Security.Cryptography; using System ...

  7. mysql的分区技术

    一.概述 当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性 能下降>的比率不一而同,要看系统的架构.应用程序.还有>包括索引.服务器硬件等多种因素 ...

  8. UIAlertController基本使用

      从ios8之后,系统的弹框 UIAlertView 与 UIActionSheet 两个并在一了起, 使用了一个新的控制器叫 UIAlertController UIAlertController ...

  9. ios开发,地图标注聚集。搜索标注title功能

    最近在做地图功能,要实现的就是地图标注聚集,还有搜索地图 地图标注通常都是大头针.如果地图缩小到一定范围的时候,会显示密密麻麻的大头针.这样会显的难看 所以设计了一定区域范围内的大头针,缩小的时候给聚 ...

  10. WPF动画之路径动画(3)

    XAML代码: <Window x:Class="路径动画.MainWindow" xmlns="http://schemas.microsoft.com/winf ...