这个题目看网上好多题解都是直接O(n*m)卡过。我是这么做的。

对于m次操作,统计每个w的次数。然后对每个w做矩阵乘法。

这样直接做矩阵乘法是会TLE的。

又由于这里的矩阵很特殊,一次乘法可以降维成O(n^2)。

--------------------------

怎么降维的可以这样模拟下:

a b c      a b c     a*a+2bc  c*c+2ab   b*b+2ac

c a b  *  c a b =  b*b+2ac  a*a+2bc  c*c+2ab

b c a      b c a     c*c+2ab  b*b+2ac  a*a+2bc

注意到原矩阵的每一行(除了第一行)都是上一行向右平移一个单位的结果,而相乘得到的矩阵也满足这个性质。

那么做一次矩阵乘法的时候,就只用算出结果矩阵的第一行,然后下面的每一行直接可由上一行得到。

复杂度降为了O(n^2)。

-------------------------

所以一个总的复杂度<O(n^2 * log1000000 * 100)=8千万.

不到2000msAC了^_^

 #include<cstdio>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<ctype.h>
#include<algorithm>
using namespace std;
typedef long long LL;
#define FF(i,x) for(i=1;i<=x;i++)
const int N = ; double cMat[N][N],retMat[N][N]; void matrixMul1(double A[][N],double B[][N],int a,int b)
{
double buff[N][N]={};
int i,j,k;
FF(i,a) FF(k,a) FF(j,b)
buff[i][j] = buff[i][j] + A[i][k]*B[k][j];
FF(i,a) FF(j,b) B[i][j]=buff[i][j];
} void matrixMul2(double A[][N],double B[][N],int a,int b)
{
double buff[N][N]={};
for(int j=;j<=a;j++)
{
for(int k=;k<=a;k++)
buff[][j]+=A[][k]*B[k][j];
}
for(int i=;i<=a;i++)
{
for(int j=;j<=a;j++) buff[i][j]=buff[i-][j-];
buff[i][]=buff[i-][a];
}
int i,j;
FF(i,a) FF(j,b) B[i][j]=buff[i][j];
} void matrixFastPow(int p,int n)
{
for(;p;p>>=)
{
if( p& ) matrixMul1(cMat,retMat,n,);
matrixMul2(cMat,cMat,n,n);
}
} int amount[]; int main()
{
int n,m,l,r;
int w; while( scanf("%d%d%d%d",&n,&m,&l,&r),n||m||l||r )
{
memset(amount,,sizeof(amount));
for(int i=;i<m;i++)
{
scanf("%d",&w);
amount[w]++;
}
for(int i=;i<=n;i++)
if( i<l || i>r ) retMat[i][]=0.0;
else retMat[i][]=1.0;
for(int i=;i<=;i++)
if( amount[i] )
{
for(int p=;p<=n;p++)
for(int q=;q<=n;q++)
cMat[p][q]=0.0;
for(int j=;j<=n;j++)
{
int a=(j-i);
while( a<= ) a+=n;
int b=(j+i);
while( b>n ) b-=n;
cMat[j][a]+=0.5;
cMat[j][b]+=0.5;
}
matrixFastPow(amount[i],n);
} printf("%.4f\n",retMat[][]);
}
return ;
}

hdu4576 概率dp n^2的矩阵的更多相关文章

  1. poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)

    题目链接 分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html 题意: 在一条不满地雷的 ...

  2. 2018.09.27 bzoj2510: 弱题(概率dp+循环矩阵优化)

    传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #def ...

  3. 【loj2325】「清华集训 2017」小Y和恐怖的奴隶主 概率dp+倍增+矩阵乘法

    题目描述 你有一个m点生命值的奴隶主,奴隶主受伤未死且当前随从数目不超过k则再召唤一个m点生命值的奴隶主. T次询问,每次询问如果如果对面下出一个n点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输 ...

  4. POJ3744 Scout YYF I 概率DP+矩阵快速幂

    http://poj.org/problem?id=3744 题意:一条路,起点为1,有概率p走一步,概率1-p跳过一格(不走中间格的走两步),有n个点不能走,问到达终点(即最后一个坏点后)不踩坏点的 ...

  5. poj 3744 概率dp+矩阵快速幂

    题意:在一条布满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  6. hdu 4576(简单概率dp | 矩阵优化)

    艰难的一道题,体现出菜菜的我... 首先,先吐槽下. 这题到底出题人是怎么想的,用普通概率dp水过??? 那为什么我概率dp写的稍微烂点就一直tle?  感觉很不公平.大家算法都一致,因为我程序没有那 ...

  7. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  8. HDU 5607 graph(矩阵优化+概率DP)

    该题非常easy想到求概率的转移方程:用d[i][j]表示第i步,走到j点的概率. 可是该题的k高达1e9.所以依照套路.要用矩阵相乘来优化. 第一次写矩阵相乘. 大概的意思就是利用矩阵实现递推. 而 ...

  9. poj3744 (概率DP+矩阵快速幂)

    http://poj.org/problem?id=3744 题意:在一条铺满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,10000000 ...

随机推荐

  1. When to use Class.isInstance() & when to use instanceof operator?

    I think the official documentation gives you the answer to this one (albeit in a fairly nonspecific ...

  2. 主成分分析(principal components analysis, PCA)——无监督学习

    降维的两种方式: (1)特征选择(feature selection),通过变量选择来缩减维数. (2)特征提取(feature extraction),通过线性或非线性变换(投影)来生成缩减集(复合 ...

  3. XML学习总结

    什么是XML?XML指可扩展标记语言(EXtendsible Markup Language) XML的设计宗旨是传输数据,而不是显示数据. XML标签没有被预定义(html是预定义),XML里面您需 ...

  4. ios状态栏调整 简单动画的知识点

    首先状态栏式view的属性,所以在viewController中直接重写: /** 修改状态栏 */ - (UIStatusBarStyle)preferredStatusBarStyle { // ...

  5. 数据结构(复习)---------字符串-----KMP算法(转载)

    字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...

  6. 使用XFire+Spring构建Web Service(一)——helloWorld篇

    转自:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html原文出处:http://tech.it168.com/j/2007- ...

  7. POJ 3553 Task schedule

    原题链接:http://poj.org/problem?id=3553 这道题主要就是贪心思想吧,对于每个job,根据其截止时间 dj 从小到大排序,我们必须要尽快把dj最小的job完成掉,这样才能使 ...

  8. 【技术贴】解决bug mantisbt APPLICATION ERROR #1502 没有找到类别

    解决bug mantisAPPLICATION ERROR #1502 没有找到类别 mantisbt出现1502问题解决:引起问题的原因:当提交的问题有分类,此时删除此分类,就会出现下面的情况.问题 ...

  9. [转载]Spring Beans Auto-Wiring

    Autowiring Modes You have learnt how to declare beans using the <bean> element and inject < ...

  10. React-Native学习指南

    React-Native学习指南 本指南汇集React-Native各类学习资源,给大家提供便利.指南正在不断的更新,大家有好的资源欢迎Pull Requests! 同时还有Awesome React ...