Uva10207 The Unreal Tournament
题目链接戳这里
首先递归调用函数次数其实是可以预处理出来的,但是这里我们介绍一个更屌的做法。
设\(F(i,j)\)为求解\(P(i,j)\)所遍历的节点数目,则有$$F(0,j)=F(i,0)=0$$
\]
我们观察一下,发现这个式子与组合恒等式$$\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的更多相关文章
- Unreal引擎术语表
转自:http://www.cnblogs.com/hmxp8/archive/2012/02/10/2345274.html Unreal引擎术语表 转载自UDN: Actor - 一个可以放置在 ...
- 使用VS2012调试ReactOS源码
目录 一 下载并安装VS2012 二 下载并安装WDK80 三 下载ReactOS0315源码 四 下载并安装RosBE211 五 用RosBE命令行编译ReactOS源码 六 用VS2012编译nt ...
- zz Must read
http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...
- C#中XmlTextWriter读写xml文件详细介绍(转)
转自http://www.jb51.net/article/35230.htm .NET中包含了很多支持XML的类,这些类使得程序员使用XML编程就如同理解XML文件一样简单.在这篇文章中,我将给 ...
- metasploit--exploit模块信息
Name Disclosure Date Rank Description ---- ...
- 第1部分: 游戏引擎介绍, 渲染和构造3D世界
原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...
- 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 ...
- 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 ...
- Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap
Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap 网络扫描和嗅探工具——Nmap Nmap也就网络映射器(Network Mapper),是一个免费开放的网络扫描和嗅探工具.该工具可以扫描 ...
随机推荐
- iOS VoiceOver Programming Guide
VoiceOver是苹果“读屏”技术的名称,属于辅助功能的一部分.VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互. 这项技术在苹果的各个系统中都可以看到,OS X,iOS,watchO ...
- update 改写 merge into
update语句改写成merge into有时会提高运行速度 看两个案例 1.根据业务将两个嵌套子查询改写成max,速度有3min提升到3s UPDATE OPER_792.LL_SCB_YDKB_2 ...
- Android(java)学习笔记162:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- Android_Intent_passObject
方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象需要考虑对Person对象进行序列化 MainActivity: package com.example.day06_acti ...
- OpenSSH Client信息泄露和缓冲区溢出漏洞
一.风险简述: 2016年1月14日OpenSSH发布官方公告称,OpenSSH Client 5.4~7.1版本中未公开说明的功能(Roaming)存在信息泄漏和缓冲区溢出漏洞,此漏洞可能导致您通过 ...
- Unity3D 之3D动画机设置
新建一个动画机 然后创建一些动画的属性 每根线都是一个动画到下一个动画的转变,动画的转变是基于条件的. 1.通过建立Parameters设定动画的转换条件 2.右边的Conditions设定可以设定是 ...
- MVC小系列(十七)【自定义验证规则给下拉框】
因为下拉框不支持验证,所以写一个attribute特性,让它继承ValidationAttributemvc的特性验证,很直接,无论是数据安全特性上还是页面表现上都不错,它的运行机制: 前台表单验证规 ...
- nginx上搭建HLS流媒体服务器
http://blog.csdn.net/cjsafty/article/details/7922849 简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTT ...
- Asp.Net部分面试题
HTML.javascript部分 1. jQuery的美元符号$有什么作用? 答:个人理解:$指代jquery对象,拥有jquery对象所有的属性和成员 网友理解:在Jquery中,$是JQuery ...
- struts1、 struts2所有版本jar包下载地址大全
jakarta-struts-1.2.2.tar.gz 30-Aug-2004 18:21 12M jakarta-struts-1.2.2.tar.gz.asc 30-Aug-2 ...