[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个球,一开始每个球均有一 ...
 
随机推荐
- uORBMain.cpp学习
			
uorb_main int uorb_main(int argc, char *argv[]) { if (argc < 2) { usage(); ...
 - 【dart学习】之字典(Map)的相关方法总结
			
一,概述 通常来讲,Map是一个键值对相关的对象,键和值可以是任何类型的对象.每个键只出现一次,而一个值则可以出现多次.映射是动态集合. 换句话说,Maps可以在运行时增长和缩小. dart:core ...
 - undefined null测试
			
测试浏览器:chrome 当有父元素的子元素未定义时undefined和null均为true,类型为undefined 当元素赋给null后undefined和null均为true,类型为object ...
 - Vue项目中添加锁屏功能
			
0. 直接上 预览链接 Vue项目中添加锁屏功能 1. 实现思路 ( 1 ) 设置锁屏密码 ( 2 ) 密码存localStorage (本项目已经封装h5的sessionStorage和localS ...
 - python学习笔记:json与字典的转换(dump 和dumps load和loads的区别)
			
1. json序列化(字典转成字符串)方法: dumps:无文件操作 dump:序列化+写入文件 2. json反序列化(字符串转成字典)方法: loads:无文件操作 ...
 - 获取项目根目录(非tomact)
			
String path; public void main(String[] args) { File file=new File(""); path=file.getAbsolu ...
 - Qt5.2中使用ping命令实现Ip扫描功能
			
在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令.如果使用Qt编程实现,主要会用QThread.QProcess这两个类.关于这两个类的具体用法可以查阅Qt助手 ...
 - javascript常用经典算法实例详解
			
javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...
 - 慎用margin系列3---IE6下3px bug
			
当我们想让一段文字出现在一个布局块的右边的时候,我们会让布局块向左浮动,然后把段落设置左布局块宽度大小的左空白.比如左布局块是.a{float:left;height: 110px;width: 28 ...
 - 基于rem的移动端响应式适配方案(详解)    移动端H5页面的设计稿尺寸大小规范
			
基于rem的移动端响应式适配方案(详解) : https://www.jb51.net/article/118067.htm 移动端H5页面的设计稿尺寸大小规范 http://www.tuyiyi.c ...