【DP系列学习一】简单题:kickstart2017 B.vote
https://code.google.com/codejam/contest/6304486/dashboard#s=p1
这是一道简单的dp,dp[i][j]代表A的voter为i,B的voter为j时的成功方案数,转移方程是dp[i][j]=dp[i-1][j]+dp[i][j-1],这里一定满足i>j,(由题意,不管何时,A都要赢),所以初始化dp[i][j]为-1,dp[0][0]=1;
这道题要注意的地方是:由于数据范围是2000,2000!非常大,所以要取对数,这是乘除对应变成加法,加法可转化为:c=log(e^a+e^b)->c=log(e^a(1+e^(b-a)))=a+log(1+e^(b-a)) 这样就不会溢出了.
以下是我的代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define eps 1e-8
#include<cmath>
using namespace std;
const int maxn=2e3+; double dp[maxn][maxn];
void init()
{ for(int i=;i<maxn;i++)
{
for(int k=;k<maxn;k++)
{
dp[i][k]=-;
}
}
dp[][]=log(1.0);
for(int i=;i<maxn;i++)
{
for(int k=;k<maxn;k++)
{
if(i>k)
{
if(dp[i-][k]!=-&&dp[i][k-]!=-)
{
dp[i][k]=dp[i-][k]+log(+exp(dp[i][k-]-dp[i-][k]));
}
else if(dp[i-][k]!=-)
{
dp[i][k]=dp[i-][k];
}
else if(dp[i][k-]!=-)
{
dp[i][k]=dp[i][k-];
}
}
}
}
}
int main()
{
// freopen("B-large-practice.in","r",stdin);
// freopen("data.out","w",stdout);
init();
int T;
scanf("%d",&T);
int n,m;
for(int kas=;kas<=T;kas++)
{
scanf("%d%d",&n,&m);
double ans=;
for(int i=;i<=m;i++)
{
ans+=(double)log(i)-(double)log(n+i);
}
ans+=(double)dp[n][m];
ans=exp(ans);
// ans+=eps;
printf("Case #%d: %.8f\n",kas,ans);
}
}
另外,这道题的答案其实就是(n-m)/n+m可以这样理解:
http://blog.csdn.net/febr2/article/details/55846416
【DP系列学习一】简单题:kickstart2017 B.vote的更多相关文章
- ZOJ 3201 树形dp+背包(简单题)
		#include<cstdio> #include<vector> #include<cstring> #include<iostream> using ... 
- bzoj3687简单题(dp+bitset优化)
		3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 861 Solved: 399[Submit][Status][Discuss] ... 
- BZOJ 3687: 简单题 bitset
		3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ... 
- acm.njupt 1001-1026 简单题
		点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ... 
- BZOJ 2683: 简单题
		2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ... 
- 【BZOJ-1176&2683】Mokia&简单题        CDQ分治
		1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ... 
- Bzoj4066 简单题
		Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 2185 Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ... 
- Bzoj2683 简单题
		Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ... 
- 这样leetcode简单题都更完了
		这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ... 
- [BZOJ2683][BZOJ4066]简单题
		[BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ... 
随机推荐
- linux 部署jenkins
			1.安装jdk,配置jdk路径,python路径 (当前用户的配置文件) vi .bash_profile export JAVA_HOME=$HOME/local/jdk1.8.0_111 exp ... 
- android 中判断WiFi是否可用的可靠方法 ,android 是否联网
			http://alex-yang-xiansoftware-com.iteye.com/blog/619841 在一些程序中,需要从网上下载数据,或者通过其他方式对网络产生流量,当wifi不可用时应该 ... 
- 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池
			前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ... 
- TCP协议之三次握手与四次挥手
			TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ... 
- Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤
			UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ... 
- cephfs创建及挂载
			Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据.Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器. 1.添 ... 
- POST和GET的详细解释以及区别
			Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ... 
- 老李分享:loadrunner操作mysql数据库
			老李分享:loadrunner操作mysql数据库 在poptest测试开发工程师就业培训的课程中,针对一套商业系统进行性能测试,目标是mysql后台数据库的负载能力,在这里我把测试代码 ... 
- 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化
			老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化 首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ... 
- Android多渠道打包
			项目需要,简单2步实现(由于简单,所以对大量渠道打包不是最优的),比如1000个渠道同时打包的话可能花费的时间会过长.不过目前该方法能满足绝大需求了...根据截图一步一步走: 第一步 设置配置清单文件 ... 
