题意:一个只含字母C和P的环形串

   求长度为n且每m个连续字符不含有超过k个C的方案数

   m <= 5  n <= 1e15

题解:用一个m位二进制表示状态 转移很好想

   但是这个题是用矩阵快速幂加速dp的 因为每一位的转移都是一样的

   用一个矩阵表示状态i能否转移到状态j 然后跑一遍

   统计答案特别讲究 因为是一个环 从1 ~ n+m

   那么 m+1 ~ n + m之间就是我们所求的 1 ~ m和n+1 ~ n + m是同样的一段

   就相当于把m位二进制状态 转移n次

   然后再转移到自己的就是答案

   初试模板题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + ; ll n, m, k, len;
struct node {
ll c[][];
}re, x; bool check(int x) {
int cnt = ;
while(x) {
if(x & ) cnt++;
x >>= ;
}
if(cnt > k) return false;
return true;
} node mul(node a, node b) {
node res;
memset(res.c, , sizeof(res.c)); for(int i = ; i < len; i++)
for(int j = ; j < len; j++)
for(int k = ; k < len; k++)
res.c[i][j] = (res.c[i][j] + a.c[i][k] * b.c[k][j] % mod) % mod;
return res;
} node pow_mod(node x, ll y) {
node res;
for(int i = ; i < len; i++) res.c[i][i] = ; while(y) {
if(y & ) res = mul(res, x);
x = mul(x, x);
y >>= ;
}
return res;
} int main() {
scanf("%lld%lld%lld", &n, &m, &k);
len = ( << m);
for(int i = ; i < len; i++)
for(int j = ; j < len; j++)
x.c[i][j] = ; for(int i = ; i < len; i++) {
if(!check(i)) continue;
int tmp = i;
int ctmp = << (m - );
if((tmp & ctmp) == ctmp) tmp -= ctmp;
tmp <<= ;
if(check(tmp)) x.c[i][tmp] = ;
tmp |= ;
if(check(tmp)) x.c[i][tmp] = ;
}
re = pow_mod(x, n); ll ans = ;
for(int i = ; i < len; i++) {
if(check(i)) {
ans += re.c[i][i];
ans %= mod;
}
}
printf("%lld\n", ans);
return ;
}

P1357 花园 (矩阵快速幂+ DP)的更多相关文章

  1. codeforces 691E 矩阵快速幂+dp

    传送门:https://codeforces.com/contest/691/problem/E 题意:给定长度为n的序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二 ...

  2. BZOJ1009 矩阵快速幂+DP+KMP

    Problem 1009. -- [HNOI2008]GT考试 1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: ...

  3. Codeforces 576D Flights for Regular Customers 矩阵快速幂+DP

    题意: 给一个$n$点$m$边的连通图 每个边有一个权值$d$ 当且仅当当前走过的步数$\ge d$时 才可以走这条边 问从节点$1$到节点$n$的最短路 好神的一道题 直接写做法喽 首先我们对边按$ ...

  4. COJ 1208 矩阵快速幂DP

    题目大意: f(i) 是一个斐波那契数列 , 求sum(f(i)^k)的总和 由于n极大,所以考虑矩阵快速幂加速 我们要求解最后的sum[n] 首先我们需要思考 sum[n] = sum[n-1] + ...

  5. Codeforces 954 dijsktra 离散化矩阵快速幂DP 前缀和二分check

    A B C D 给你一个联通图 给定S,T 要求你加一条边使得ST的最短距离不会减少 问你有多少种方法 因为N<=1000 所以N^2枚举边数 迪杰斯特拉两次 求出Sdis 和 Tdis 如果d ...

  6. Codeforces 989E A Trance of Nightfall 矩阵快速幂+DP

    题意:二维平面上右一点集$S$,共$n$个元素,开始位于平面上任意点$P$,$P$不一定属于$S$,每次操作为选一条至少包含$S$中两个元素和当前位置$P$的直线,每条直线选取概率相同,同一直线上每个 ...

  7. BZOJ1009: [HNOI2008]GT考试 (矩阵快速幂 + DP)

    题意:求一个长度为n的数字字符串 (n <= 1e9) 不出现子串s的方案数 题解:用f i,j表示长度为i匹配到在子串j的答案 用kmp的失配函数预处理一下 然后这个转移每一个都是一样的 所以 ...

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

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

  9. [luogu1357] 花园 [dp+矩阵快速幂]

    题面: 传送门 思路: 把P形花圃记录为0,C形记录为1,那么一段花圃就可以状态压缩成一个整数 那么,我们可以有这样的状压dp: dp[i][S]表示前i个花圃,最后m个的状态为S的情况 如果这是一条 ...

随机推荐

  1. org.hibernate.hql.ast.QuerySyntaxException: Student is not mapped [from Student as stu where stu.sclass=?]

    java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: t_aty_disease is not ...

  2. PCB 线路铜皮面积(残铜率)计算的实现方法

    一个多月没更新博客园了,这里继续分享关于PCB工程相关一些知识,做过PCB工程都知道用使用genesis或incam是可以非常方便的计算得到铜皮面积这个参数[下图],但实际这个软件是通过什么算法计算出 ...

  3. Thrift 原理与使用实例

    一.Thrift 框架介绍 1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定 ...

  4. layui前端框架实例(修复官网数据接口异常问题)

    layui前端框架实例,官网的实例会提示数据接口异常,已修复. 主要是修改数据表格,做一个可以用的实例,可以选中,编辑,删除等. gitee地址:https://gitee.com/pingg2019 ...

  5. 删除一个ppa

    https://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/ 总结如下: 1: 桌面删除,进入software & update,然后 ...

  6. 跟我一起玩Win32开发(25):监视剪贴板

    自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用迅雷下载经典大剧<汉武大帝>晚上睡觉前看上几集,老邪一 ...

  7. JS获取屏幕的大小

    <html><script>function a(){document.write("屏幕分辨率为:"+screen.width+"*" ...

  8. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  9. ACM_扫雷(dfs)

    扫雷 Time Limit: 2000/1000ms (Java/Others) Problem Description: 扫雷这个游戏想必各位都是会玩的吧.简单说一下规则,n行m列的格子地图上有分布 ...

  10. 牛客网NOIP赛前集训营-普及组

    第一场: A-绩点 题目描述 小A刚考完大学考试.现在已经出了n门课的成绩,他想自己先算一下这些课的绩点是多少.设第i门课的他拿到的绩点是gpai,而这门课的学分是sci,那么他的总绩点用下面的公式计 ...