CF908D 【New Year and Arbitrary Arrangement】
蒟蒻渣渣禹小心翼翼发布题解。。。。
这道题,嗯,期望,dp,好,我们有思路了。。。。
however,
主要问题在于字符串无限延伸,so,我们需要考虑记录前缀的关键量来为DP设置终止状态。
我们不妨设f[i][j]表示前缀中有i个a和j个ab停止后的期望长度,设 A = pa / (pa + pb),B = pb / (pa + pb)。这样推方程就容易很多。
状态转移方程:f[i][j] = A * f[i + 1][j] + B * f[i][i + j]
接下来只用解决两个问题:
1.终止状态:
当i+j>=k时,再加一个b就会终止,期望为i+j+c,其中:
c=0B+1AB+2A^2B+...+∞A^∞*B
这是等差×等比数列,运用高中数学的错位相减法(特别的,A^∞=0),可以得到:
c=pa/pb
故有终止状态f[i][j]=i+j+pa/pb,i+j>=k。
2.初始状态:
初始空字符串为f[0][0],但是会发现f[0][0]会从f[0][0]本身转移。
其原因是没有a时会无限加b,解决办法是初始状态设为f[1][0]。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define LL long long
const int m = 1e9 + 7,N = 1005;
void gcd(int a,int b,int&x,int &y){
if(!b){
x = 1;
y = 0;
}
else{
gcd(b,a % b,y,x);
y -= x * (a / b);
}
}
int inv(int a){
int x,y;
gcd(a,m,x,y);
return (x % m + m) % m;
}
LL f[N][N],k,pa,pb,A,B,C;
int main(){
scanf("%d %d %d",&k,&pa,&pb);
A = (pa * inv(pa + pb) % m);
B = (1 - A + m) % m;
C = (pa * inv(pb) % m);
for(int i = k;i >= 1;i--)
for(int j = k;j >= 0;j--)
f[i][j] = i + j >= k ? (i + j + C) % m : (A * f[i + 1][j] + B * f[i][i + j]) % m;
printf("%d",f[1][0]);
return 0;
}
CF908D 【New Year and Arbitrary Arrangement】的更多相关文章
- 【CodeForces】908 D. New Year and Arbitrary Arrangement
[题目]Good Bye 2017 D. New Year and Arbitrary Arrangement [题意]给定正整数k,pa,pb,初始有空字符串,每次有pa/(pa+pb)的可能在字符 ...
- 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用
十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 【Python五篇慢慢弹】数据结构看python
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 【十大经典数据挖掘算法】PageRank
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...
- 【十大经典数据挖掘算法】EM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 【十大经典数据挖掘算法】SVM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...
随机推荐
- js面向过程 分页功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot图文教程4—SpringBoot 实现文件上传下载
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- 网站调用qq第三方登录
1. 准备工作 (1) 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. ① 注册QQ互联开发者账号 网址 https:/ ...
- my97日期控件弹出位置显示异常
使用my97日期选择控件的时候,如果整个页面是有滚动条的,根据触发显示日期的控件的父控件的position不同会显示不同的情况 1.position不为fixed则滑动滚动条,显示的日期层不会出现异常 ...
- 使用git上传项目解决码云文件次数上传限制(原文)
起因:个人免费版的码云上传文件时限制: 1个小时内只能上传20个文件 解决方法:在码云创建空的项目仓库,使用git客户端下载码云的项目,把需要上传的文件复制到该项目中去,用git提交! 1.配置git ...
- vue 对象数组中,相邻的且相同类型和内容的数据合并,重组新的数组对象
在项目中,有时候会遇到一些需求,比如行程安排,或者考勤状态.后台返回的获取是这一周的每一天的状态,但是我们前端需求显示就是要把相邻的且状态相同的数据进行合并,所以我们就要重新组合返回的数据.如下所示: ...
- springboot1.5.9 整合单机版redis3.2.8
redis是一种可基于内存也可基于持久话的日志型.key-value数据库.因为性能高,存储数据类型丰富等优势常被用作数据缓存. 我们利用spring-boot-autoconfiguration.j ...
- 【C语言】用指针描述数组,实现选择法排序
#include <stdio.h> int main() { ], t; int i, j, max; printf("请输入10个数:\n"); ; i <= ...
- selenium+python自动化用例登陆界面模板
一.基本逻辑 1.自动填写用户名和密码登录成功后跳转到相应页面 2.验证相应页面的url与给定的url是否一致,如果一致则测试通过,如果不一致则不通过 二.以jenkins登陆界面为例,代码如下 fr ...
- SOCV/POCV 开篇 (1)
1.功能:模拟工艺偏差对芯片性能的影响 2. 40nm之前 flat derate模型可以基本覆盖大部分情况 3.AOCV (Adance OCV) 考虑distance 和depth的影响. AOC ...