每个长度为p的区间都必须出现k次1,数据又很小,我们使用状压。

dp[i][j]->dp[i+1][j'],dp[i][j]表示当前考虑到了第i个车站,包括第i个其后的p个的状态(有车停或没车停),其中j'为j中某一个车动一次到达的状态,为了防止复杂度爆炸,先dfs求一遍有用的状态。

然后矩阵转移。。

另外提一下初末状态,注意到起始站的限制,初末状态都应是p个里前k个都是1。(在代码实现中就正好对应了第一个dfs的状态)

这也是开始B.t[1][1]赋值1和最后输出B.t[1][1]的原因

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<algorithm>
  6. using namespace std;
  7. const int maxn=,mod=;
  8. struct matr{
  9. int t[maxn][maxn],n,m;
  10. matr operator*(matr &a){
  11. matr c;
  12. for(int i=;i<=n;++i)
  13. for(int j=;j<=a.m;++j){
  14. c.t[i][j]=;
  15. for(int k=;k<=n;++k)
  16. c.t[i][j]=(c.t[i][j]+t[i][k]*a.t[k][j])%mod;
  17. }
  18. c.n=n;c.m=a.m;
  19. return c;
  20. }
  21. }A,B;
  22. int n,k,p,q[maxn];
  23. void dfs(int pos,int num,int cnt){
  24. if(cnt==k){q[++q[]]=num;return;}
  25. for(int i=pos-;i>=;--i)
  26. dfs(i,num+(<<i),cnt+);
  27. }
  28. int check(int x,int y){
  29. int tmp=x-(<<(p-));
  30. tmp<<=;tmp^=y;
  31. if(tmp==(tmp&(-tmp)))return ;
  32. return ;
  33. }
  34. int main(){
  35. cin>>n>>k>>p;
  36. dfs(p-,(<<(p-)),);
  37. A.n=A.m=B.n=B.m=q[];
  38. for(int i=;i<=q[];++i)B.t[i][i]=;
  39. for(int i=;i<=q[];++i)
  40. for(int j=;j<=q[];++j){
  41. if(check(q[i],q[j]))A.t[i][j]=;
  42. }
  43. /*for(int i=1;i<=q[0];++i){
  44. for(int j=1;j<=q[0];++j)
  45. cout<<A.t[i][j]<<' ';
  46. cout<<endl;
  47. }*/
  48. int cc=n-k;
  49. while(cc){
  50. if(cc&)B=B*A;
  51. cc>>=;A=A*A;
  52. }
  53. cout<<B.t[][]<<endl;
  54. //system("pause");
  55. return ;
  56. }

bzoj2004(矩阵快速幂,状压DP)的更多相关文章

  1. bzoj2004 [Hnoi2010]Bus 公交线路 矩阵快速幂+状压DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2004 题解 如果 \(N\) 没有那么大,考虑把每一位分配给每一辆车. 假设已经分配到了第 \ ...

  2. hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)

    题意 如果一个 \(1\to N\) 的排列 \(P=[P_1, P_2, ... P_N]\) 中的任意元素 \(P_i\) 都满足 \(|P_i-i| ≤ K\) ,我们就称 \(P\) 是 \( ...

  3. Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)

    题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...

  4. bzoj2004 矩阵快速幂优化状压dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...

  5. POJ 3744 【矩阵快速幂优化 概率DP】

    搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...

  6. 【BZOJ5010】【FJOI2017】矩阵填数 [状压DP]

    矩阵填数 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行 ...

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

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

  8. 一本通 1783 矩阵填数 状压dp 容斥 计数

    LINK:矩阵填数 刚看到题目的时候感觉是无从下手的. 可以看到有n<=2的点 两个矩形. 如果只有一个矩形 矩形外的方案数容易计算考虑 矩形内的 必须要存在x这个最大值 且所有值<=x. ...

  9. hdu 5564 Clarke and digits 矩阵快速幂优化数位dp

    Clarke and digits Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

随机推荐

  1. MVC之CodeFirst

    1.建立MVC项目>NuGet安装EF 2.建立模型: public class Blog { [Key] [DatabaseGenerated(DatabaseGeneratedOption. ...

  2. WebAPI支持Session

    1.在App_Start/WebApiConfig.cs中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它: public class ...

  3. 扩展、委托、Lambda、linq

    1.扩展 扩展是一个很有用的功能.如果你有一个类.不能修改,同时你又想给他加一个方法.这个过程就是扩展.扩展就是扩展方法. 例1: 类People public class People { publ ...

  4. 简单使用DESeq2/EdgeR做差异分析

    简单使用DESeq2/EdgeR做差异分析 Posted: 五月 07, 2017  Under: Transcriptomics  By Kai  no Comments DESeq2和EdgeR都 ...

  5. PS快捷键大全,记住这些就够了!

    希望能帮到大家更好的学习.

  6. sqli-labs:18-22,http头部注入

    sqli18: uname和passwd被处理了: uagent和ip插入到了数据库: 还带回显. 抓包改包 sqli19: null sqli20: 审计代码,大概如下 当我们正常登录后userna ...

  7. Mac虚拟机

    2018-06-21 需要的Mac静像是ios或是cdr的,如果是dmg,可以参考这个转换http://blog.sina.com.cn/s/blog_60b45f230101kkbf.html 或  ...

  8. 【UI测试】--美观与协调性

  9. SecureCRT乱码解决

    本文不涉及编码,只说明ssh问题产生的乱码 如果终端中输出以下字符,就会出现乱码 echo -e '\xe' 还有 ctrl+v,ctrl+n也能产生乱码 恢复方法 echo -e '\xf'

  10. applicationContext-common.xml]; nested exception is java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal

    14:59:16,747 ERROR ContextLoader:350 - Context initialization failedorg.springframework.beans.factor ...