[bzoj2510]弱题 (循环矩阵优化dp)
Description
Input
Output
Sample Input
3 0
Sample Output
1.333
HINT
【样例说明】
第1次操作后,由于标号为2球个数为0,所以必然是一个标号为1的球变为标号为2的球。所以有2个标号为1的球,有1个标号为2的球。
第2次操作后,有1/3的概率标号为2的球变为标号为1的球(此时标号为1的球有3个),有2/3的概率标号为1的球变为标号为2的球(此时标号为1的球有1个),所以标号为1的球的期望个数为1/3*3+2/3*1
= 5/3。同理可求出标号为2的球期望个数为4/3。
【数据规模与约定】
对于10%的数据,N ≤ 5, M ≤ 5, K ≤ 10;
对于20%的数据,N ≤ 20, M ≤ 50, K ≤ 20;
对于30%的数据,N ≤ 100, M ≤ 100, K ≤ 100;
对于40%的数据,M ≤ 1000, K ≤ 1000;
对于100%的数据,N ≤ 1000, M ≤ 100,000,000, K ≤ 2,147,483,647。
比较显然的一道期望dp 但是循环矩阵这个东西是真没见过
设$f[i][j]$表示第i次操作后标号为i的球的期望个数
易得
$f[i][j]=(1-\frac{1}{m})*f[i-1][j]+\frac{1}{m}*f[i-1][j-1]$
特判$f[i][1]=(1-\frac{1}{m})*f[i-1][1]+\frac{1}{m}*f[i-1][n]$
即目前状态要么是上次抽到该标号-1的球转移来的,要么是上次抽到与该标号无关的球转移来的
但是K的范围十分不友好 考虑优化
可以想到矩乘,但是$n^3log^k$显然也不可接受
把方程中的系数放到矩阵里,可以看出它是一个循环矩阵
循环矩阵间的乘法具有封闭性,所以只需保留一行
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,K;
struct matrix
{
double a[];
matrix()
{
memset(a,,sizeof(a));
}
}dp,num;
void debug()
{
puts(" ");
for(int i=;i<n;i++)
cout<<num.a[i]<<' ';
puts(" ");
}
matrix operator * (matrix x,matrix y)
{
matrix res;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
res.a[(i+j)%n]+=x.a[i]*y.a[j];
return res;
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<n;i++)
scanf("%lf",&dp.a[i]);
num.a[]=((double)(m-))/m;num.a[]=1.0/m;
while(K)
{
//debug();
if(K&)dp=dp*num;
num=num*num;
K>>=;
}
for(int i=;i<n;i++)
printf("%.3lf\n",dp.a[i]);
return ;
}
[bzoj2510]弱题 (循环矩阵优化dp)的更多相关文章
- bzoj 2510: 弱题 循环矩阵
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 61[Submit][Status][Discuss] De ...
- Bzoj2510 弱题(矩阵快速幂)
题面(权限题) 题解 一道概率\(dp\),可以设\(f[i][j]\)表示第\(i\)次操作后,标号为\(j\)的小球的期望个数,那么有: \[ \begin{aligned} &f[i][ ...
- 矩阵优化dp
链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include < ...
- [六省联考2017]组合数问题 (矩阵优化$dp$)
题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][ ...
- bzoj 3120 矩阵优化DP
我的第一道需要程序建矩阵的矩阵优化DP. 题目可以将不同的p分开处理. 对于p==0 || p==1 直接是0或1 对于p>1,就要DP了.这里以p==3为例: 设dp[i][s1][s2][r ...
- HDU - 2294: Pendant(矩阵优化DP&前缀和)
On Saint Valentine's Day, Alex imagined to present a special pendant to his girl friend made by K ki ...
- FZU 1692 Key problem( 循环矩阵优化 + 矩阵快速幂)
链接:传送门 题意: n个小朋友围成一个环( 2 <= n <= 100 )然后进行m次的游戏. 一开始,第 i 个小朋友有 Ai 个苹果. 定义游戏的规则为:每一次游戏处于 i 位置的小 ...
- 2018.09.27 bzoj2510: 弱题(概率dp+循环矩阵优化)
传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #def ...
- 【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 374 Solved: 196 Description 有M个球,一开始每个球均有一 ...
随机推荐
- QByteArray和十六进制的QString(char*)相互转换
#include <QCoreApplication> #include <QDebug> #include <QDataStream> QByteArray He ...
- Kubernetes v1.16 对API的更改
前段时间安装Kubernetes v1.16.2,然后从v1.14版本的拷贝yaml文件过来执行,很多都报没有相应的api,查看一下新版本的api admissionregistration.k8s. ...
- css 布局(圣杯、双飞翼)
一. 圣杯布局. 左右固宽,中间自适应 三列布局,中间宽度自适应,两边定宽: 中间部分要在浏览器中优先展示渲染: 具体步骤:1.设置基本样式2.圣杯布局是一种相对布局,首先设置父元素container ...
- Arduino入门套件 Arduino UNO R3
限时大抢购:原价5.6元超声波模块HC-SR04,现只需3元,亏本大甩卖,只赚人气,如需购买的客户请直接拍下以下链接3件=3元购买,备注超声波模块即可,每个客户ID每天仅限购一个.http://det ...
- MacBook Pro 快捷键2
Mac 键盘快捷键 您可以按下组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作. 要使用键盘快捷键,请按住一个或多个修饰键,同时按快捷键的最后一个键.例如,要使用快捷键 Command ...
- 泛微oa系统com.eweaver.base.DataAction文件sql参数sql注入
URL/ServiceAction/com.eweaver.base.DataAction?sql=select%201,2,3,4,5,6,7,8,9,233%20from%20DUAL%20
- 使用LoadRunner监控Apache
前提本文使用的是lampp环境下自带的Apache服务 一.查看文件 查看文件确保目录中有Apache,我在这里使用的是用xampp自带apache [root@besttest ~]# ll 二.配 ...
- nmon 定时任务 监控资源
nmon命令: # ./nmon –f -s 30 –c 100 说明:-f 以文件的形式输出,默认输出是机器名+日期.nmon的格式,也可以用-F指定输出的文件名,例如: # ./nmon_x8 ...
- tushare下载安装教程与版本更新步骤
使用前提 安装Python 安装pandas:pip install pandas 安装lxml:pip install lxml 下载安装 方式1:pip install tushare,如果安装网 ...
- ACM_ICPC_Team
题目: There are a number of people who will be attending ACM-ICPC World Finals. Each of them may be we ...